Im try out unique_ptr, чтобы увидеть, как управление памятью работает в C++.Memoryleak при использовании std :: unique_ptr
Ding.h
#pragma once
class Ding
{
public:
int value;
Ding();
~Ding();
};
Ding.cpp
#include "stdafx.h"
#include "Ding.h"
#include <iostream>
Ding::Ding()
{
value = 90000;
std::cout << "Constructor for ding called.";
}
Ding::~Ding()
{
std::cout << "Destructor for ding called.";
}
main.cpp
#include "stdafx.h"
#include <memory>
#include "Ding.h"
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main()
{
std::cout << "starting." << std::endl;
std::vector<std::unique_ptr<Ding>> dingen;
for (int i = 0; i < 10; i++)
{
std::unique_ptr<Ding> toAdd(new Ding);
dingen.push_back(std::move(toAdd));
}
std::cout << "ending" <<std::endl;
_CrtDumpMemoryLeaks();
return 0;
}
Когда я запускаю этот код я могу увидеть ошибки памяти в выходном зрения отладки :
Detected memory leaks! Dumping objects -> {151} normal block at 0x00000155B0798140, 104 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {144} normal block at 0x00000155B07A2300, 16 bytes long. Data: < S > 08 FB 53 D3 14 00 00 00 00 00 00 00 00 00 00 00 Object dump complete.
Что создает эти утечки?
изменить: как ответ dasblinkenlight заявил, что мне нужно использовать (новый Ding), я аккуратно удалил эту часть, пытаясь найти утечку. Добавил его к вопросу, поскольку он не решает проблему утечки памяти, но вызывает конструктор и деструктор для ding.
Вы не получаете никакого результата от конструктора или деструктора, потому что вы на самом деле не создаете * никаких объектов. –
Ну, для начала вы никогда не создаете никаких объектов Ding. (Что заставило вас думать, что вы это сделали?) Но в вашем коде нет утечек, так что это странно. –
Интересно, почему он обнаруживает утечки памяти. Наверное, потому что все еще в стеке? Если вы завершаете все, кроме _CrtDumpMemoryLeaks() в фигурных скобках, проблема может быть решена. –