我正在使用仿真框架。生成的每个粒子都有一个指向UserInfo对象的指针的槽(这样您就可以将所需的任何信息附加到粒子上)。问题在于,只要粒子死亡,框架就会删除这些用户信息。由于有数以百万计的粒子,往往有重复的信息,我只想在信息不同时创建一个新的UserInfo对象。问题当然是每当一个粒子被杀死的时候,它将删除它有一个指针的UserInfo对象(不管这个同样的对象是否也附着在其他粒子上)。只删除最后一个参考,CRTP
我需要采取哪些步骤在粒子死亡时保持粒子不会删除UserInfo对象?我知道我需要为我的UserInfo类做一些引用计数和重载删除。但是,我从来没有超载删除之前,所以我有几个问题:
如果我有一个类层次结构,如:
class VirtualUserInfo; class A : public VirtualUserInfo; class B : public A ...etc
,我重载A类中删除,将它,如果删除工作在指向VirtualUserInfo的指针或指向B类的指针上调用? (非常类似,如何重新载入以正常工作?是否需要为每个新的派生类再次重新载入新内容?)
很容易用奇怪的循环模板模式进行引用计数。有没有办法在这种混合风格的时尚中加入删除行为?将这种类型的行为应用到我要编写的任何类型的UserInfo上会很好。
有没有一些更酷的/更好的方式来做我想做的事情?
它看起来像你需要的是一个智能指针。为此,C++有'std :: shared_ptr'。 – Asha 2012-02-23 04:45:33
我可以在任何地方使用智能指针吗?因为我需要使用像someFrameworkClass :: setUserInfo(VirtualUserInfo * myUserInfo); – user487100 2012-02-23 04:48:16
是的,但请注意,智能指针有不同类型。看看这里的细节:http://stackoverflow.com/questions/106508/what-is-a-smart-pointer-and-when-should-i-use-one为了得到一个原始的指针出来的智能指针你必须使用像get这样的方法。 – Asha 2012-02-23 04:50:28