3
class AAA{
}

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

クラス BBB の関数で NEW を使用してポインターを作成して返しました。どこかで削除する必要があるかどうかを知りたいです。もしそうすべきなら、どうすればそれを達成できますか?Java の経験はありますが、C++ はまったくの初心者です。助けてください。

申し訳ありませんが、私は自分の問題をうまく説明していないと思います。2 つの 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」コードをどこに記述すればよいかわかりません。

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_ptrまたはを使用できますshared_ptr

newただし、C++ では変数をポインターにする必要はありません。オブジェクトを作成して返すことができます:

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

作成したポインターを誰が使用するかわからない場合は、ポインターの所有権 (したがって、ポインターを削除する責任) をクラスのクライアントに譲渡するのが最善の方法です。

その方法はいくつかあります。最も簡単な方法は、 を使用することstd::auto_ptrです。このように、関数を使用するコードは関数の使用時にポインターの所有権を取得std::auto_ptrし、クライアント コード側で変数を破棄すると、作成したポインターが削除されます。

于 2013-03-29T15:39:22.597 に答える