gpt4 book ai didi

c++ - C++中依赖类的生命周期?

转载 作者:行者123 更新时间:2023-11-28 02:01:03 25 4
gpt4 key购买 nike

我有一个类 A,它提供了构造类 B 实例的方法。 B 持有对 A 的私有(private)引用,并提供构造函数来设置此引用。

class A { 
public:
B* construct_B ();
}
class B {
private:
const A& private_A;
public:
B ( const A& my_A ): private_A (my_A) { }
}

construct_B 的实现负责动态分配并通过this 将引用传递给自身。

我如何以确保 A 的生命周期长于 B 的生命周期来实现此设置,以便其引用保持有效?请注意,我不关心 construct_B 的所有可能性,而不是返回原始指针我可以返回智能指针或类似指针。

解决这个问题的一种可能方法是使用 B 而不是持有指向 A 的智能指针的引用,而不是动态分配 Bconstruct_B 中获取对 B 的静态引用,然后设置它的指针,类似于

class A : 
public std::enable_shared_from_this<A> {
public:
void setup_B ( const B& my_B ) {
my_B.set_A (shared_ptr_from_this() ) ;
}
class B {
private:
const shared_ptr<A> private_A_ptr;
public:
void set_A ( const shared_ptr<A> my_A ):
private_A_ptr (my_A) { }
}

然后可以通过以下方式实现 诠释主要(){ 静态A; B静态B; A.setup_B(static_B);

最后这个构造的shared_ptr是否避免了AB之前被删除的问题?

最佳答案

shared_ptr 就是您的答案。像这样:

#include <memory>

struct A;

class B {
const std::shared_ptr<A> private_A_ptr;
public:
B(std::shared_ptr<A> parent) : private_A_ptr(std::move(parent)) {}
};

struct A :
std::enable_shared_from_this<A>
{
B make_b() {
return B(shared_from_this());
}
};

int main()
{
// this would be invalid:
//A a;
//auto b = a.make_b();

// but this is fine

auto pa = std::make_shared<A>();
auto b = pa->make_b();

// later...
pa.reset();

// A still exists because ownership was shared with b

}

关于c++ - C++中依赖类的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39513364/

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