我有这样的情况
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_,但datainptr_会是一样的 - 你可以假设这Foo是一些容器的大问题)