【发布时间】:2014-08-09 03:23:17
【问题描述】:
我有一个继承自抽象类 MapSite 的 Room 类。 Room 的析构函数如下所示:
Room::~Room()
{
delete[] sides;
}
MapSites 的析构函数是这样的:
virtual ~MapSite() {}
构造函数如下所示:
Room::Room() : inventory(new Inventory)
{
for(size_t i = 0; i < 5; i++)
sides[i] == nullptr;
}
房间的私有成员如下所示:
private:
int roomNumber = INVALID_ROOM_NUMBER; // Room number
MapSite *sides[5]; // Room roof/floor/wall/exits
std::string name; // Name of room
std::string description; // Room description
std::string lookDescription; // Extra description shown on look command
std::string filename = INVALID_ROOM_FILENAME; // Lua file associated with room
bool visited = false;
std::unique_ptr<Inventory> inventory;
我收到了警告:
room.cxx: In destructor ‘virtual Room::~Room()’:
room.cxx:45:12: warning: deleting array ‘((Room*)this)->Room::sides’ [enabled by default]
delete[] sides;
有人可以向我解释一下这个警告是什么意思吗?我应该/如何禁止它?我无法从谷歌快速搜索中找到任何东西。谢谢!
【问题讨论】:
-
首先,
sides[i] = nullptr;不是sides[i] == nullptr; -
其次,你试图删除一个具体的数组。
sides[5]不需要删除,也许它的元素可以。 -
@Gluttton side 是一个大小为 5 的数组,其元素是指向 MapSite 对象的指针。
-
呃,我现在觉得自己很蠢,谢谢! @40two
-
这里真正的问题是你应该声明
std::array<std::unique_ptr<MapSite>, 5> sides;并删除你的析构函数。
标签: c++ memory destructor