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

时间:2012-09-26 02:23:33

标签: 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

int main (int argc, char **argv)
{
  return 0;
}

以下是我想要修改的答案:

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

小额外问题: 有没有办法使ptr1工作(我试过reset())或者是那种糟糕的编程习惯(如果是这样的话)?

感谢您的澄清!

1 个答案:

答案 0 :(得分:4)

在第一种情况下,指针不是动态分配的,因此shared_ptr不应该尝试销毁底层对象。这可以通过使用自定义的no-op删除器仿函数来完成:

http://www.boost.org/doc/libs/1_51_0/libs/smart_ptr/sp_techniques.html#static