Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除可能保存在两个不同位置的数据_C++_New Operator - Fatal编程技术网

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

C++ 删除可能保存在两个不同位置的数据,c++,new-operator,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(So

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

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创建的对象,在指定该指针时,将ptrTobj指向该指针。(因此,基本上,您知道如果第二个指针不为NULL,则可以安全地删除它)
  • 实现一个ref计数指针。(这比我想要的要多一些)

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

使用
共享的\u ptr
,或者使用最近的C++(0x)库中的一个
shared_ptr
对您的参考值有效。

如前所述,这种情况可以通过
shared_ptr
解决,但我建议您阅读有关其他策略的智能指针。我发现了一个关于这些技术以及使用它们的情况的有趣的例子。

如果你不想使用智能指针,请查看observer DP