我正在使用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*指向的对象也被B类中的“vb_x”的X*所指向。
现在我想使用智能指针。对我来说,很明显B类拥有被X*指向的对象的所有权(特别是因为我的A实例属于B)
因此,我应该在B内使用unique_ptr来管理X:
class B {
std::vector<unique_ptr<X>> vb_x;
std::vector<A> vb_a;
};
我的问题是,对于A类我应该怎么做?我是否应该保留裸指针?这样做,在我的单元测试中,我必须承认会导致一些尴尬的事情(在我看来),例如(不要担心封装,那不是重点):
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
A
中,并构建您的代码,使得B
对象必须首先存在。 - Kerrek SB