我想知道在我的类的构造函数中初始化 auto_ptr 成员的正确方法。我的班级有 2 个(或更多)不同类型的 auto_ptr 实例。其中一个的初始化取决于第一个初始化的结果。
为了澄清,这就是我正在做的事情:
class C1 {
...
}
class C2 {
...
}
class Holder {
private:
auto_ptr<C1> c1;
auto_ptr<C2> c2;
public:
Holder() :
c1(new C1()),
c2(NULL)
{
int x = this->c1->getGeneratedValue1();
int y = this->c1->getGeneratedValue2();
if (x > 0 && y > 0) {
auto_ptr<C2> lC2(new C2(true, 10));
this->c2 = lC2;
} else if (x > 0) {
auto_ptr<C2> lC2(new C2(false, 20));
this->c2 = lC2;
} else if (y > 0) {
auto_ptr<C2> lC2(new C2(false, 30));
this->c2 = lC2;
} else {
auto_ptr<C2> lC2(new C2(false, 0));
this->c2 = lC2;
}
}
};
该示例有点重复,但它强制执行 2 个 auto_ptr 实例之间的依赖关系。我决定在构造函数主体中创建一个本地 auto_ptr,并在初始化它后立即将其托管实例的所有权转移给类成员。
这是正确的方法还是我应该使用更好/更安全的 semothing?
非常感谢。