如果任一类都可以更改指针的值,则使用指向指针的指针 - 例如,通过删除现有对象并用新对象替换它。这允许两个类通过解除对指针的引用仍然使用相同的对象。
如果不是,您关心的是确保对象在两个类的整个生命周期内保持有效。
- 如果嵌套类的寿命较短,您不必担心。
- 如果它是相同的,只要你以正确的顺序清理(例如首先嵌套类,然后是对象)然后再一次,你不必担心
- 如果嵌套类在所有者被销毁后仍然存在,那么您必须实现一种方法来确保对象也存在。
如果您需要确保对象的生命周期,可以通过引用计数语义来完成,无论是手动还是通过智能指针接口。
对于智能指针, boost::shared_ptr 将是一个不错的选择。shared_ptr 允许一个对象的所有权被多个指针共享。当最后一个 shared_ptr 超出范围时,该对象被删除。
(注意这不是 auto_ptr 的情况,其中一个对象是独占的)。
需要注意的事项;
- 使用 boost::shared_ptr 时,请确保嵌套类具有 shared_ptr 的副本,而不是引用/指针。
- std::auto_ptr 的行为完全不同,对象是独占而不是共享的
- boost::shared_ptr 只能用于堆对象,例如从调用“new”返回的指针
例子:
typedef boost::shared_ptr<Interface> shared_interface;
class NestedClass
{
shared_interface mInterface; // empty pointer
}
void NestedClass::setInterface(shared_interface& foo)
{
mInterface= foo; // take a copy of foo.
}
void ParentClass::init( void )
{
// mInterface is also declared as shared_interface
mInterface = new Interface();
mNestedClass->setInterface(mInterface);
}