我知道完全这是错误造成的,我想我甚至可能知道为什么 - 但我无法弄清楚它在做什么:
间
// room.hpp
#include "linkedlist.hpp"
#include "item.hpp"
class item;
class Room {
public:
Room();
private:
LinkedList<Item> itemsInThisRoom_;
};
-
// room.cpp
#include "room.hpp"
#include <iostream>
Room::Room() {
itemsInThisRoom_ = LinkedList<Item>();
};
链表
// linkedlist.hpp
//====================
// Class (Declaration)
template<class T> struct LinkedList {
public:
LinkedList();
~LinkedList();
private:
Node<T>* head_;
};
//====================
// Class (Instantiation)
template<class T> LinkedList<T>::LinkedList() {
head_ = new Node<T>;
size_= 0;
};
template<class T> LinkedList<T>::~LinkedList() { delete head_; };
的main.cpp
#include <iostream>
#include "room.hpp"
#include "linkedlist.hpp"
int main() {
Room room;
return 0;
};
在调用Room的析构函数时调用错误 - 并且仅在初始化房间对象时调用。这很好用:
#include <iostream>
#include "room.hpp"
#include "linkedlist.hpp"
int main() {
Room* room;
return 0;
};
另外,我可以自己构造/破坏LinkedList的实例而没有问题。我认为以某种方式'head_'被删除两次,但我无法弄清楚如何。
(有人建议我开始使用std :: unique_ptr而不是new / delete,我将开始做,但我只是想弄清楚为什么会导致错误!)
答案 0 :(得分:1)
您手动管理内存,这意味着您还需要实现赋值运算符和复制构造函数。
现在,当您复制对象:itemsInThisRoom_ = LinkedList<Item>();
时,在删除堆栈对象(LinkedList<Item>();
)时释放内存,但itemsInThisRoom仍然指向它。
因此,当它被销毁时,它会尝试删除已在堆栈对象中删除的内存。