gpt4 book ai didi

c++ - unique_ptr 的 vector 未被完全删除(内存泄漏)

转载 作者:行者123 更新时间:2023-12-01 14:50:57 25 4
gpt4 key购买 nike

<分区>

我正在编写一个程序,最终需要我为自定义类的对象创建一个 unique_ptr vector 。我遇到了一些内存泄漏问题,所以我决定从等式中删除自定义类,然后使用 unique_ptr 进行尝试。

当我尝试在堆栈上创建一个 unique_ptr 时,没有泄漏。但是,创建一个 unique_ptrs vector 确实泄漏。为了好玩,我还尝试将 unique_ptr 移动到 vector 中以查看发生了什么。我的代码如下(包括 MSVS 内存检查):

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#include <vector>
#include <memory>
using namespace std;

int main()
{
vector<unique_ptr<int>> testvector;
unique_ptr<int> addMe;

testvector.emplace_back(move(addMe));
testvector.clear();

_CrtDumpMemoryLeaks();
return 0;
}

当我注释掉除创建“addMe”之外的所有内容时,我没有泄漏。
当我注释掉除创建“testvector”之外的所有内容时,我得到了 8 个字节的内存泄漏。
当我将“addme”的 emplace_back 注释掉到“testvector”时,我得到了 8 个字节的内存泄漏。
当我什么都不注释时,我得到 12 字节的内存泄漏。
当我用“shared_ptr”替换所有“unique_ptr”时,一切行为都一样。

我是不是做错了什么,或者这是智能指针 vector 的预期结果?

谢谢!

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com