1

有没有一种方法可以在不使用new关键字的情况下实现这一点?

void World::generateChunk(Coordinate coord) {
    if(loadedChunks[coord])
        delete loadedChunks[coord];
    loadedChunks[coord] = new Chunk(coord);
    loadedChunks[coord]->generate();
}

loadChunks 是一个std::map<Coordinate, Chunk*>.

4

1 回答 1

3

是的,通过使用:

std::map<Coordinate, Chunk>

World::generateChunk() 他们会变成:

void World::generateChunk(Coordinate coord)
{
    loadedChunks[coord] = Chunk(coord);
    loadedChunks[coord].generate();
}

请注意这一点的含义。由于分配了现有对象,因此不再调用析构函数。并且多态性不再起作用(您将无法在 中存储Chunk子类loadedChunks。)此外,至少loadedChunks.size()对象将始终存在;它们不可删除。

Chunk还必须满足标准容器类的标准,例如可复制、可分配等。并确保这些操作正常工作(例如,您需要确定是需要深拷贝还是浅拷贝。)

于 2013-07-29T17:55:30.527 回答