|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <iostream>
- #include <vector>
- #include <memory>
- struct Object{
- int a=0;
- };
- struct TrackedObject{
- int b = 0;
- std::shared_ptr<Object> objectptr;
- };
- typedef std::shared_ptr<TrackedObject> TrackedObjectPtr;
- int main(){
- std::vector<TrackedObjectPtr> tracked_objects;
- tracked_objects.clear();
-
- return 0;
- }
复制代码
如上,我有一个vector,里面存放的是share_ptr,使用完成之后,只将tracked_objects 给clear了是否可行,还是需要对共享指针也做删除。
如果需要删除共享指针,应该怎样手动删除,才能完整的删除vector并保证内存不泄漏呢?
需要手动删除共享指针,否则会发生内存泄漏。在vector中存放的是shared_ptr,当vector被清空时,它所包含的shared_ptr只是减少了引用计数,而指向的内存空间仍然存在,如果没有其他地方引用该内存空间,就会发生内存泄漏。
正确的做法是在vector被清空时,遍历vector中的每一个shared_ptr,将其reset为nullptr,这样可以将引用计数减少到0,从而释放所指向的内存空间。代码如下:
- for (auto& ptr : tracked_objects) {
- ptr.reset();
- }
- tracked_objects.clear();
复制代码
这样就可以完整的删除vector并保证内存不泄漏。
|
|