gpt4 book ai didi

c++ - 适合组合的智能指针

转载 作者:行者123 更新时间:2023-11-30 02:40:52 25 4
gpt4 key购买 nike

我有一个类的继承结构:

struct A {
ObjectByValue obv;
};

struct B : A {
OtherThings ot;
};

另一个类需要一个指向A的指针:

struct C {
smartpointer<A> a;
};

当我创建 C 时,我传入了一个已经创建的 B(作为指向 A 的指针)。 C 不拥有 A(没有 AC 没有任何意义)。 C 将(希望)总是在 A 指针被释放之前死掉。我应该使用智能指针吗?引用?原始指针?这里有最佳实践吗?

最佳答案

答案很大程度上取决于什么拥有 A实例。

  • 如果“没有人”拥有 A实例,则它必须是全局的或静态分配的。在这种情况下,您应该使用普通引用 ( A& )。这也断言该对象永远不会为 null(即它在 C 的生命周期内始终存在)。

否则,对象是动态分配的:

  • 如果其他对象拥有 A例如,可以证明比 C 更长寿,那么情况与静态分配的情况非常相似。所有者应该有一个 unique_ptr<A> , 和 C可以有一个简单的引用。
  • 如果其他对象拥有 A实例,但可能会或可能不会比 C 长寿, 那么所有者应该使用 shared_ptr<A>C应该使用 weak_ptr<A> .如果所有者在C之前被删除是,那么 weak_ptr将自动变为空。
  • 如果所有权应在 C 之间共享实例和其他一些所有者,那么你应该使用 shared_ptr<A>在这两个地方。然后,C实例保证其 A成员始终有效,并且共享所有权(在删除 A 之前必须删除所有所有者的意义上)。

关于c++ - 适合组合的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28595337/

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