IST*_*STB 17 c++ pointers shared
我正在使用std::shared_ptr,在我的软件开发过程中,我遇到了几个让我对内存管理产生怀疑的案例.我有一个第三方库,它总是给我提供函数的原始指针,在我的代码中我将它们转换为std::shared_ptr(从std而不是boost.顺便说一句,两者之间有什么区别?).所以我想说我有以下代码:
ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
Run Code Online (Sandbox Code Playgroud)
现在当共享指针超出范围时会发生什么(假设它在函数中被声明为本地,现在我正在退出该函数).请问ClassA对象仍然存在,因为原始指针指向它?
joh*_*ohn 29
不,不会.通过给指向shared_ptr的指针,您可以为shared_ptr提供删除它的责任.当引用它的最后一个shared_ptr对象不再存在时,它将执行此操作.原始指针不计算在内.
没有.共享指针将删除它.
如果您有第三方库为您提供指针,则需要确保以正确的方式删除它.例如,如果第三方lib使用'malloc'分配它,那么您需要使用lib使用的'free'的实现.你需要确定它是如何分配的.
库是否提供了销毁它为您提供的对象的方法?在这种情况下,您应该使用该函数来销毁它.