3
class AAA{
}

class BBB{
public:
   AAA* doSomething(){
      return new AAA();
   }
}

我在 BBB 类的函数中创建并返回了一个带有 NEW 的指针,我想知道是否应该在某处删除它。如果我应该,那么我该如何实现呢?我有一些Java经验,但我是C++的新手,请帮助我。

对不起,我想我没有很好地描述我的问题。假设我必须编写一个连接两个 char[sizeA] 和 char[sizeB] 的函数。所以我想我应该做这样的事情:

char* concatenate(char* str1, char* str2, int sizeA, int sizeB){
   char* temp = new char[sizeA + sizeB - 1];
   ...
   return temp;
}

这就是我在 Java 中会做的事情,但我不知道如何在 C 中做到这一点。我不知道谁会使用这个返回的 char[],所以我不知道在哪里编写“删除”代码。

4

4 回答 4

6

你不需要指针,那么为什么要使用指针呢?有什么问题

AAA doSomething()
{
   return AAA();
}

如果必须,返回一个std::unique_ptr.

如果您真的想使用原始指针,只需delete使用结果即可。

于 2013-03-29T15:10:52.600 回答
1

删除指针的方法是使用delete

BBB b;
AAA *a = b.doSomething();

// ...

delete a;

但是如果你想让它更安全使用可以使用unique_ptrshared_ptr

但是在 C++ 中,您不必将new变量作为指针。您可以创建一个对象并返回它:

class BBB{
public:
    AAA doSomething() { 
       return AAA();
    }
};
于 2013-03-29T15:11:41.817 回答
0

因为你的背景是java。请按值、按引用和按指针阅读参数。

AAA doSomething()
{
   return AAA();
}

您可以在 B 类中创建此函数。

于 2013-03-29T15:14:34.920 回答
0

如果您不知道谁将使用您创建的指针,最好的方法是将指针的所有权(以及删除它的责任)转移给您的类的客户端。

There are several way to do so. The simplest one is to use std::auto_ptr. This way, the code using your function will gain the pointer ownership upon using your function and the destruction of the std::auto_ptr variable on the client code side will lead to the deletion of the pointer you created.

于 2013-03-29T15:39:22.597 回答