当前位置:  开发笔记 > 编程语言 > 正文

指向指针问题的指针

如何解决《指向指针问题的指针》经验,为你挑选了1个好方法。

我有一个类(非智能)指向接口对象的类(让我们称之为pInterface),我正在构建一个嵌套类,它也需要访问该接口.我将通过将指针传递给嵌套类的构造函数来解决这个问题,如下所示:

CNestedClass someClass( pInterface, ... );

但是我不确定将此指针存储在嵌套类中的最佳方法.我可以用:

1) A scoped (or other smart) pointer (to the original object)
2) A pointer to a pointer 

你们会建议什么,为什么?

编辑:我应该澄清 - 嵌套类将需要调用接口对象上的方法,但它不会创建它(或修改对象'指向'),父类负责.



1> Andrew Grant..:

如果任一类可以改变指针的值,则使用指向指针的指针 - 例如,通过删除现有对象并将其替换为新对象.这允许两个类仍然通过解引用指针指针来使用相同的对象.

如果不是,您的关注点是确保对象在两个类的整个生命周期内保持有效.

如果嵌套类的寿命更短,你不必担心.

如果它是相同的,只要你按照正确的顺序进行清理(例如先嵌套类,稍后是对象)然后再次,你不必担心

如果嵌套类在所有者被销毁后仍然存在,那么您必须实现一种方法来确保该对象也会持久存在.

如果需要确保对象的生命周期,可以通过引用计数语义来手动或通过智能指针接口完成.

对于智能指针,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 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);
}

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有