不使用新的C ++陷阱泄漏

时间:2018-10-12 12:47:15

标签: c++ object memory-leaks destructor

嗨, 我有一些我不太了解的奇怪陷阱。

==10594== HEAP SUMMARY:
==10594==     in use at exit: 72,704 bytes in 1 blocks
==10594==   total heap usage: 2 allocs, 1 frees, 73,728 bytes allocated
==10594== 
==10594== 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1
==10594==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==10594==    by 0x4EC6345: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.24)
==10594==    by 0x40106B9: call_init.part.0 (dl-init.c:72)
==10594==    by 0x40107CA: call_init (dl-init.c:30)
==10594==    by 0x40107CA: _dl_init (dl-init.c:120)
==10594==    by 0x4000C69: ??? (in /lib/x86_64-linux-gnu/ld-2.23.so)

主要

Car car("SUV",5000);
std::cout << car;

Car.cpp

//Constructor
Car::Car(std::string type, int budget) : name_(type), budget_(budget),momentary_cost_(0)
{
}
//Desctructor
Car::~Car()
{
  while(!PartsList.empty())
  {
    delete PartsList.front();
    PartsList.pop_front();
  }
}
//Output
std::ostream& operator<<(std::ostream& screen, const Car& car)
screen<< car.type_ <<":" << std::endl;
  int cost = 0;
  for (auto parts : car.PartsList)
  {

    screen << *parts;
    cost += parts->getCost();

  }
  screen << "-------------" << std::endl << "Total Cost: " << cost <<std::endl;
  return screen;

我的意思是,即使不添加任何零件,我也会漏水。只需创建类别。到目前为止,我尝试执行的是三个规则。这给了我相同的valgrind输出。在另一个上下文中,我从未调用过addParts()函数,该函数的确具有新功能,它应该在PartsList中添加Parts,但在析构函数中将其删除。也有 Parts.cpp ,但它从来没有出现过。我尝试跟踪它。 我认为这是一个非常棘手的问题,并且我缺少一些非常简单的东西。我只是找不到。

0 个答案:

没有答案