如何删除在函数中创建并作为返回值的指针

How to delete a pointer created in a function and as the return value

本文关键字:创建 返回值 指针 函数 何删除 删除      更新时间:2023-10-16
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[],所以我不知道在哪里写"删除"代码。

不需要指针,为什么要用指针呢?

怎么了?
AAA doSomething()
{
   return AAA();
}

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

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

删除指针的方法是使用delete:

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

但如果你想更安全的使用,可以使用unique_ptrshared_ptr

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

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

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

AAA doSomething()
{
   return AAA();
}

你可以在类b中创建这个函数。

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

有几种方法可以这样做。最简单的方法是使用std::auto_ptr。这样,使用函数的代码将在使用函数时获得指针所有权,并且在客户端代码端销毁std::auto_ptr变量将导致删除您创建的指针。