Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;共享发布顺序_C++_Destructor_Shared Ptr_Lifetime_Order Of Execution - Fatal编程技术网

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指针。我认为无论如何都应该使用别名:依赖声明的顺序是脆弱的,这与智能指针自动处理资源的概念背道而驰。