由于共享指针,我遇到了程序脏关闭的问题。我找到了解决方案,但我不确定,如果我有正确的答案。
这是简约的例子:
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()
)或者是那种糟糕的编程习惯(如果是这样的话)?
感谢您的澄清!
答案 0 :(得分:4)
在第一种情况下,指针不是动态分配的,因此shared_ptr不应该尝试销毁底层对象。这可以通过使用自定义的no-op删除器仿函数来完成:
http://www.boost.org/doc/libs/1_51_0/libs/smart_ptr/sp_techniques.html#static