【发布时间】:2012-09-15 08:19:17
【问题描述】:
我正在使用 C++11 编写一些代码。我有
class X { /* */ };
class A {
std::vector<X*> va_x;
};
class B {
std::vector<X*> vb_x;
std::vector<A> vb_a;
};
A 类中“va_x”的 X*s 指向 B 类中“vb_x”的 X*s 也指向的对象。
现在我想使用智能指针。对我来说,显然 B 类拥有 X* 指向的对象的所有权(特别是因为我的 A 实例属于 B)
所以我应该在 B 中为 X 使用 unique_ptr:
class B {
std::vector<unique_ptr<X>> vb_x;
std::vector<A> vb_a;
};
我的问题是,我应该为 A 班做些什么?我应该保留原始指针吗?通过这样做,在我的单元测试中,我必须承认它会导致一些尴尬的事情(imo),例如(不要担心封装,这不是重点):
unique_ptr<X> x(new X());
A a;
a.va_x.push_back(&(*x)); //awkward, but what else can I do?
A.vb_a.push_back(a); //ok
B.vb_x.push_back(move(x)); //ok
【问题讨论】:
-
对于未来有关 C++11 的问题,请同时使用 C++ 标记它们。 :)
-
你之前不是问过一个几乎相同的问题吗?
-
@DeadMG 好吧,前一个也是关于 unique_ptr 但我认为这不是一回事
-
您可能一开始就不应该在向量中存储原始指针!为什么不将唯一指针放入向量中?
-
@BérengerBerthoul:在这种情况下,将引用包装器存储在
A中,并构造您的代码,以便B对象必须首先存在。
标签: c++ c++11 unique-ptr ownership