例如,我有一个MyClass类和另外两个处理MyClass对象的类。
A类 - 创建MyClass;
B类 - 使用MyClass;
在A和B中存储和共享MyClass对象的正确方法是什么。需要使用 new 运算符创建MyClass并将指针存储在unique_ptr中。或者实现 move c-tor ,并将MyClass创建为堆栈变量?
变式1:
class A
{
public :
unique_ptr<MyClass> mObj;
};
class B
{
B( unique_ptr<MyClass> inObj ) : mObj( inObj ) {};
public :
unique_ptr<MyClass> mObj;
}
变式2:
class A
{
public :
MyClass mObj;
};
class B
{
B( MyClass&& inObj ) : mObj( inObj ) {};
public :
MyClass mObj;
};
使用:
A a;
B( a.mObj );
答案 0 :(得分:0)
在A
接管之后,您的两个示例中的B
类都无法使用myObj!这可能不是你的意思。但是,如果是这样,我建议使用unique_ptr
。很明显,A
是否以及何时失去对myObj
的访问权限。您可以通过检查myObj
是否为空指针来测试是否为。
答案 1 :(得分:-1)
两种提议的解决方案都不会起作用,因为作为成员变量和unique_ptr都有两个独立的对象。
如果需要访问同一个对象,可以使用std :: shared_ptr,也可以使用引用。
使用shared_ptr:
class A
{
public :
A() : mpObj( new MyClass ) {}
shared_ptr<MyClass> mpObj;
};
class B
{
public :
B( shared_ptr<MyClass> inObj ) : mpObj( inObj ) ;
shared_ptr<MyClass> mpObj;
};
另一个选择是使用引用:
class A
{
public :
A() : mpObj() {}
MyClass mpObj;
};
class B
{
public :
B( MyClass& inObj ) : mpObj( inObj ) ;
MyClass& mpObj;
};
重要的是说谁创建并初始化MyClass对象。
另请阅读Dependency injection。