gpt4 book ai didi

c++ - 指向指针问题的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:32 26 4
gpt4 key购买 nike

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

CNestedClass someClass( pInterface, ... );

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

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

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

编辑:我应该澄清一下——嵌套类将需要调用接口(interface)对象上的方法,但它不会创建它(或修改“指向”的对象),父类对此负责。

最佳答案

使用指向指针的指针是指任何一个类都可以改变指针的值——例如通过删除现有对象并将其替换为新对象。这允许两个类通过解除对指针的引用来使用相同的对象。

如果不是,您需要确保对象在两个类的整个生命周期内保持有效。

  • 如果嵌套类的生命周期更短,您真的不必担心。
  • 如果相同,只要您以正确的顺序清理(例如先嵌套类,再清理对象),那么您就不必担心
  • 如果嵌套类可以在所有者被销毁后继续存在,那么您必须实现一种方法来确保该对象也继续存在。

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

对于智能指针,boost::shared_ptr 是一个不错的选择。 shared_ptr 允许一个对象的所有权被多个指针共享。当最后一个 shared_ptr 超出范围时,对象将被删除。

(注意这不是 auto_ptr 的情况,其中一个对象是独占的)。

注意事项;

  1. 使用 boost::shared_ptr 时,确保嵌套类具有 shared_ptr 的拷贝,而不是引用/指针。
  2. std::auto_ptr 的行为完全不同,对象是独占的而不是共享的
  3. 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);
}

关于c++ - 指向指针问题的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com