boost shared_ptr在程序退出时变为无效

boost shared_ptr在程序退出时变为无效,boost,memory-leaks,initialization,shared-ptr,Boost,Memory Leaks,Initialization,Shared Ptr,我遇到了一个问题,因为共享指针,我的程序脏兮兮地关闭了。我找到了一个解决方案,但我不确定我是否有正确的答案 这是一个极简主义的例子: double var; boost::shared_ptr<const double> ptr1 (&var); // creates an invalid pointer on program exit boost::shared_ptr<const double> ptr2 (new double); // works fine

我遇到了一个问题,因为共享指针,我的程序脏兮兮地关闭了。我找到了一个解决方案,但我不确定我是否有正确的答案

这是一个极简主义的例子:

double var;
boost::shared_ptr<const double> ptr1 (&var); // creates an invalid pointer on program exit
boost::shared_ptr<const double> ptr2 (new double); // works fine

int main (int argc, char **argv)
{
  return 0;
}
double-var;
boost::shared_ptr ptr1(&var);//在程序退出时创建无效指针
boost::共享_ptrptr2(新双精度);//很好
int main(int argc,字符**argv)
{
返回0;
}
以下是我的答案,我想解释一下:

ptr1
的情况下,指向的对象将在指针之前删除,指针随后指向无效地址。但是在
ptr2
的情况下,共享指针的“智能”处理了上述问题。 是吗

小问题: 有没有办法让ptr1工作(我尝试了
reset()
)或者这是一种糟糕的编程实践(如果有,为什么)


谢谢你的澄清

在第一种情况下,指针不是动态分配的,因此共享的ptr不应该试图破坏底层对象。这可以通过使用自定义的无操作删除函数来完成:


在第一种情况下,指针不是动态分配的,因此共享的\u ptr不应该试图破坏底层对象。这可以通过使用自定义的无操作删除函数来完成:


获取堆栈变量的地址并将其传递到共享_ptr@PSIAlt,这不是堆栈变量,它是全局变量,但关键是它不是动态分配的,因此不能由具有默认删除项的
共享\u ptr
所有。获取堆栈变量的地址并传递到共享_ptr@PSIAlt,这不是一个堆栈变量,而是一个全局变量,但关键是它不是动态分配的,因此不能由带有默认删除器的
共享\u ptr
所有