C ++原始指针和std :: shared_ptr

时间:2012-09-14 12:57:02

标签: c++ pointers shared

我正在与std::shared_ptr合作,在我的软件开发过程中,我遇到了一对 让我怀疑内存管理的案例。我有一个第三方图书馆 给了我总是函数的原始指针,在我的代码中,我正在改变它们 进入std::shared_ptr(来自std,而不是来自boost。顺便说一句,有什么区别 他们俩?)。所以我要说我有以下代码:

ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);

当共享指针超出范围时会发生什么(假设它是在函数中本地声明的) 现在我退出了这个功能)。 ClassA对象是否仍然存在,因为原始指针 指着它?

3 个答案:

答案 0 :(得分:29)

不,不会。通过给指向shared_ptr的指针,您可以为shared_ptr提供删除它的责任。当引用它的最后一个shared_ptr对象不再存在时,它将执行此操作。原始指针不算数。

答案 1 :(得分:5)

没有。共享指针将删除它。

如果您有第三方库为您提供指针,则需要确保以正确的方式删除它。例如,如果第三方lib使用'malloc'分配它,那么您需要使用lib使用的'free'的实现。你需要确定它是如何分配的。

图书馆是否提供了销毁它为您提供的对象的方法?在这种情况下,您应该使用该函数来销毁它。

答案 2 :(得分:2)

不,ClassA对象将被销毁。除非您没有将shared_ptr复制到范围之外,因此其参考计数器为&gt; 1。