由于共享指针,我遇到了程序脏关闭的问题。我找到了一个解决方案,但我不确定我是否有正确的答案。
这是极简主义的例子:
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;
}
这是我想验证的答案:
在被ptr1
指向对象的情况下,会在指针之前被删除,从而指向一个无效的地址。但是在ptr2
共享指针的“智能”的情况下处理上述问题。真的?
一个额外的小问题:有没有办法让 ptr1 工作(我试过reset()
)或者是不好的编程习惯(如果是这样,为什么)?
感谢您的澄清!