删除可能在两个不同位置保存的数据

时间:2011-04-07 17:41:46

标签: c++ new-operator

我有一个程序执行以下操作:

class SomeObject{}
{
    void function(int x, int y);
    void function(SomeOtherObject *z);

    SomeOtherObject *ptrToObj;
}

SomeObject::function(int x, int y)
{
    ptrToObj = new SomeOtherObject(x, y);
}

SomeObject::function(SomeOtherObject *z)
{
    ptrToObj = z;
}

我的问题是,当我想要删除或初始化SomeObject的实例时,我不知道处理删除该新对象的最佳方法,因为我不能指望它实际上是由SomeObject创建的。 (如果SomeObject传递指针,则管理器正在处理删除)

我想到的选项:

  • 复制对象并指向该对象。 (有两个副本似乎很麻烦,尽管对象不是那个大)
  • 如果需要删除对象,请设置一个布尔值。 (这只是一种奇怪和黑客)
  • 创建另一个指针来保存SomeObject创建的对象,将ptrToObj指向该指针,而不是指定它。 (所以基本上,你知道第二个指针可以安全地删除,如果它不是NULL)
  • 实现引用计数指针。 (这比我想要的更多一点)

我做了第三个,但我知道必须有更好的方法来处理这个问题!

3 个答案:

答案 0 :(得分:2)

使用shared_ptrthe one from Boost或最近的C ++(0x)库中的shared_ptr。 {{1}}确实为您引用了计数。

答案 1 :(得分:0)

这种情况可能由shared_ptr解决,如前所述,但我建议阅读有关其他策略的智能指针。我在技术和使用它们的情况下找到了一个有趣的summary

答案 2 :(得分:0)

如果您不想使用智能指针,请查看观察者DP。