簡體   English   中英

如何刪除函數中創建的指針和返回值

[英]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 []所以我不知道在哪里寫“delect”代碼。

你不需要指針,為什么要使用指針? 怎么了?

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變量將導致刪除您創建的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM