在我的程序中,我有一堆自定义类Position的对象。Position的声明如下:
class Position {
public:
Position(int x, int y);
~Position();
Actor *getActor() { return actor.get(); };
void setActor(Actor *actor) { actor = std::move(actor); };
Actor *clearActor() { return actor.release(); };
int getX() { return x; };
int getY() { return y; };
private:
int x, y;
std::unique_ptr<Actor> actor;
};
我也有一个名为Actor的类。并非每个Position都会有一个Actor,因此大多数情况下,与Position对象关联的unique_ptr“actor”应为空(我使用unique_ptr来自动清理与Position相关联的任何Actor)。
Position构造函数如下:
Position::Position(int x, int y)
{
this->x = x;
this->y = y;
actor.reset(nullptr);
}
然而,我知道这并没有正确地将存储的指针设置为nullptr,因为当我尝试在Position::getActor()内部调用actor.get()时,我会收到以下错误:
在____.exe中的0x01096486处第一次机会异常:访问地址0x00000008时发生0xC0000005异常。
有没有一种方法可以将成员unique_ptr初始化为nullptr? 我知道我可以通过向Actor类添加一个变量来解决这个问题,该变量定义Actor是否活动,将unique_ptr设置为一个新的不活动的Actor,并忽略所有不活动的Actor,但如果可能的话,我宁愿避免这样做。
谢谢!
编辑:我已添加了调用getActor的代码:
bool Grid::addActor(Actor *actor, int x, int y)
{
Position *destination = at(x, y);
if (!destination->getActor()) {
destination->setActor(actor);
actor->setPosition(x, y);
actor->setGrid(this);
return true;
}
else {
inactive_actors.emplace_back(actor);
return false;
}
}
getActor()
吗? - user3920237getActor()
返回nullptr
,那就是未定义行为。 - user3920237getActor
返回的nullptr
? - emlai