如何删除在函数中创建并作为返回值的指针
How to delete a pointer created in a function and as the return value
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_ptr
或shared_ptr
。
然而,在c++中,您不必将变量new
作为指针。你可以创建一个对象并返回它:
class BBB{
public:
AAA doSomething() {
return AAA();
}
};
因为你的背景是java。请阅读按值、按引用和按指针的参数。
AAA doSomething()
{
return AAA();
}
你可以在类b中创建这个函数。
如果您不知道谁将使用您创建的指针,最好的方法是将指针的所有权(因此,删除它的责任)转移到您的类的客户端。
有几种方法可以这样做。最简单的方法是使用std::auto_ptr
。这样,使用函数的代码将在使用函数时获得指针所有权,并且在客户端代码端销毁std::auto_ptr
变量将导致删除您创建的指针。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 如何为伺服电机创建中断或返回值?
- 在没有返回值优化的情况下将两个对象加在一起时,将创建多少个临时对象
- 如何在 c++ 中创建具有返回值的内联范围
- 创建一个函数,该函数根据边缘转换为给定(浮点)时间值计算布尔返回值
- 当实际使用该返回值时,如何仅支付函数创建的返回值的成本?
- 处理共同创建实例返回值
- 在C++中创建一个具有引用调用返回值的类函数
- 从方法指针动态创建泛型函数指针,推导返回值和参数
- 在自动销毁变量之前或之后创建的c++返回值
- 创建一个向主窗体返回值的模态窗口
- 如何创建QThread块并等待从主线程调用的函数返回值?
- 如何删除在函数中创建并作为返回值的指针
- 如何在GMOCK中使用未指定的参数创建返回值
- 创建输出文件 .rdstate() 时出错,返回值 2