【发布时间】:2015-01-26 22:45:43
【问题描述】:
我有这样的情况
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_,但ptr_ 中的data 将是相同的 - 您可以假设Foo 是什么有一些容器很大)
【问题讨论】:
标签: c++ c++11 typedef shared-ptr make-shared