我有一个叫做块的对象,它包含一个指向b2Body的指针。它做了其他重要的事情,但为了简单起见我删除了这些内容开头,智能指针不起作用(我想),你会明白为什么。不同的析构函数类型?
class DChunk
{
public:
DChunk();
DChunk(const DChunk& old);
virtual ~DChunk();
virtual b2Body* getBody() const;
private:
b2Body* m_pBody;//pointer;
};
问题是,如何定义何时删除m_pBody对象。
如果我想复制这个对象,就像说有这些东西的向量,我push_back另一个,它会调用复制构造函数,复制m_pBody的内存地址(多数民众赞成我想要的),然后删除旧的。如果该对象的析构函数删除m_pBody,这显然是不好的,因为新的副本不会有一个有效的内存地址,但如果不删除它,然后m_pBody将永远不会被删除,而它需要被删除时,有没有更多的块指向它。
删除m_pBody对象的唯一正确的方法是调用m_pBody-> GetWorld() - > DestroyBody(m_pBody);那不在我的控制之下,所以聪明的指针并不真正起作用。 我希望能有适当调用的不同类型的析构函数,比如在向量中创建副本时。另外,如果有帮助的话,应该永远不会有多个与一个b2Body相关联的块。
'm_pBody'必须是指针吗? – LihO
您可以使用具有自定义删除器的智能指针。 C++ 11提供它们,Boost拥有它们,你也可以自己创建。 – Cornstalks
1.是的,必须是指针。 2.我不认为我有权访问C++ 11。如果我真的需要,我想我可以使用Boost,但我宁愿避免将更多的库放入此项目。我打算自己做,但我认为有一个更经典的方式来处理它。 –