我有这样的情况
struct Foo
{
Foo(int x, int y) : x(x), y(y)
{
}
int x, y;
};
class Bar
{
public:
typedef std::shared_ptr<const Foo> ConstFooPtr;
typedef std::shared_ptr<Foo> FooPtr;
Bar(int index = 0, FooPtr ptr = FooPtr()) : index_(index), ptr_(ptr)
{
}
private:
ConstFooPtr ptr_;
int index_;
};
我想制作 Bar,我想到了 2 种方法
Bar::FooPtr ptr(new Foo(1, 2)); //1
auto ptr2 = std::make_shared<Bar::FooPtr::element_type>(42, 13); //2
auto bar = Bar(0, ptr);
第一个很笼统,因为如果我要更改类型,FooPtr
也许我不必更改此代码。但new
我猜它使用的是不好的。
Second 不使用new
,但它假定它shared_ptr
也不通用。
有什么方法可以让它工作并通用吗?或者也许我不应该在构造函数中使用一些 ptrs?
(我存储ptr
是const Foo
因为我会复制Bar
和更改index_
,但data
inptr_
会是一样的 - 你可以假设这Foo
是一些容器的大问题)