[英]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_ptr
或shared_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.