Я пишу программу, которая в конечном итоге потребует от меня создания вектора unique_ptrs для объектов пользовательского класса. У меня были утечки памяти, поэтому я решил удалить пользовательский класс из уравнения и просто попробовать его с unique_ptr.
Когда я пытаюсь создать unique_ptr в стеке, утечек нет. Однако создание вектора из unique_ptrs делает утечку. Ради интереса я также попытался переместить unique_ptr в вектор, просто чтобы посмотреть, что произойдет. Мой код ниже (включает проверку памяти 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 байт.
Когда я закомментирую emplace_back из "addme" в "testvector", я получаю утечку памяти в 8 байт.
Когда я ничего не комментирую, я получаю утечку памяти в 12 байт.
Все ведет себя так же, когда я заменяю все " unique_ptr» с «shared_ptr».
Я делаю что-то не так, или этого следует ожидать от векторов умных указателей?
Спасибо!
clear()
уничтожит объекты, но вектор может сохранить память (что вы можете проверить с помощьюcapacity()
) для будущего использования. - person Cornstalks   schedule 27.02.2015_CrtDumpMemoryLeaks();
. Таким образом, вы можете убедиться, чтоtestvector
полностью уничтожено, прежде чем вы проверите наличие утечек памяти. - person Cornstalks   schedule 27.02.2015