我目前正在学习面向对象编程/OOP和C++技能,并遇到了以下情况:
我正在制作一个游戏,游戏中有实体,这些实体需要进食才能生存。它们可以吃其他实体或食物。为了实现这种行为,我创建了一个 edible
接口,强制每个实现该接口的类创建一个 getNutritionalInformation()
方法来计算饱食度。
因此,整个代码应该像这样工作:
std::unique_ptr<Entity> e1(new Entity);
std::unique_ptr<Entity> e2(new Entity);
std::cout << "Pre feasting energy: " << e1->getNutritionalInformation() << std::endl;
e1->eat(*e2);
std::cout << "After feasting energy: " << e1->getNutritionalInformation() << std::endl;
在此操作之后,c1
的能量应该比以前高,这个值在实体创建时是随机分配的。但是为了模拟被吃掉的实体的“死亡”,我想在它被吃掉的过程中手动“杀死”它。我是通过以下方式实现的:
void Entity::eat(Edible& subject) {
this->energy += subject.getNutritionalInformation();
delete &subject;
}
但最终,这对我来说似乎有点不太干净。我真的希望以某种方式让智能指针知道它当前持有/指向的对象已不再有效。是否有更干净的方法实现这一点?我相信我尝试这样做的方式非常hacky,并且不被视为正确的面向对象编程。
提前感谢您的帮助。
unique_ptr
调用reset
以清除指针并销毁它所指向的对象呢? - NathanOliverEntity
是基类,否则最好创建堆栈上的局部变量而不是使用指针。 - Nir Friedman