我正在与std::shared_ptr
合作,在我的软件开发过程中,我遇到了一对
让我怀疑内存管理的案例。我有一个第三方图书馆
给了我总是函数的原始指针,在我的代码中,我正在改变它们
进入std::shared_ptr
(来自std,而不是来自boost。顺便说一句,有什么区别
他们俩?)。所以我要说我有以下代码:
ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
当共享指针超出范围时会发生什么(假设它是在函数中本地声明的)
现在我退出了这个功能)。 ClassA
对象是否仍然存在,因为原始指针
指着它?
答案 0 :(得分:29)
不,不会。通过给指向shared_ptr的指针,您可以为shared_ptr提供删除它的责任。当引用它的最后一个shared_ptr对象不再存在时,它将执行此操作。原始指针不算数。
答案 1 :(得分:5)
没有。共享指针将删除它。
如果您有第三方库为您提供指针,则需要确保以正确的方式删除它。例如,如果第三方lib使用'malloc'分配它,那么您需要使用lib使用的'free'的实现。你需要确定它是如何分配的。
图书馆是否提供了销毁它为您提供的对象的方法?在这种情况下,您应该使用该函数来销毁它。
答案 2 :(得分:2)
不,ClassA
对象将被销毁。除非您没有将shared_ptr
复制到范围之外,因此其参考计数器为&gt; 1。