1

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

这是极简主义的例子:

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())或者是不好的编程习惯(如果是这样,为什么)?

感谢您的澄清!

4

1 回答 1

4

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

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

于 2012-09-26T02:32:56.377 回答