C++ C++;共享发布顺序
在我的代码中,我有C++ C++;共享发布顺序,c++,destructor,shared-ptr,lifetime,order-of-execution,C++,Destructor,Shared Ptr,Lifetime,Order Of Execution,在我的代码中,我有 void Test(){ std::shared_ptr<A> a = std::shared_ptr<A>(new A()); std::shared_ptr<B> b = std::shared_ptr<B>(new B(a->getSomething()); } void测试(){ std::shared_ptr a=std::shared_ptr(新的a()); std::shared_ptr b=s
void Test(){
std::shared_ptr<A> a = std::shared_ptr<A>(new A());
std::shared_ptr<B> b = std::shared_ptr<B>(new B(a->getSomething());
}
void测试(){
std::shared_ptr a=std::shared_ptr(新的a());
std::shared_ptr b=std::shared_ptr(新b(a->getSomething());
}
问题是,a
在b
之前发布,但是在b
发布期间,我需要a
中的一些东西,这些东西是通过a->getSomething()
获得的。我无法更改getSomething
方法
我可以更改(设置)释放共享指针的顺序吗?假设您颠倒了原始问题中对象的顺序(否则,该问题没有任何意义),您不需要更改释放顺序,而是应该使用共享指针构造函数的别名形式。类似于:
std::shared_ptr<B> b(a, a->getSomething());
std::shared_ptr b(a,a->getSomething());
假设您颠倒了原始问题中对象的顺序(否则,该问题没有任何意义),您不需要更改发布顺序,而是应该使用共享\u ptr构造函数的别名形式。类似于:
std::shared_ptr<B> b(a, a->getSomething());
std::shared_ptr b(a,a->getSomething());
在这里的代码中,b的析构函数在a之前被调用。我看不出问题。那么你能共享一个MVCE吗?基本上,共享a的代码在b
之前被销毁,这样我们就能更好地理解你的问题。在这里的代码中,b的析构函数在a之前被调用。我看不到问题那么你共享一个MVCE吗?基本上,共享在b
之前被销毁的a
代码,这样我们就可以更好地理解你的问题保持一个指向a的共享指针,不管怎样都应该使用别名:依赖声明的顺序是脆弱的,这与sma自动处理资源的概念背道而驰rt指针。我认为无论如何都应该使用别名:依赖声明的顺序是脆弱的,这与智能指针自动处理资源的概念背道而驰。