関数間またはオブジェクト間でポインターを渡したり、それらを返したりすることについてお聞きしたい..一般的にポインターを渡したり返したりすること (配列またはオブジェクト、またはそれらが指しているものを指しているかどうか) は安全ではなく、出力は保証されません。
それはどこから入手したのですか?一般に、それは真実ではなく、もちろんポインターを渡すことができます。
注意が必要なのは、(ヒープに割り当てられた) オブジェクトの所有権を管理することです。これは、どこかでメモリを再度解放する必要があるためです。つまり、 でメモリを割り当てるとnew
、 で再度解放する必要がありますdelete
。
例:
A* function1(A* a) {
return a;
}
B* function2(B* b) {
return new B(b);
}
function1
既存のポインタを返します。渡されたオブジェクトを所有していた人は誰でもA
、同じであるため、返されたオブジェクトも所有します。この知識はfunction1
!
function2
B
入力引数をコピーしてクラスの新しいオブジェクトを作成します。誰が呼び出しても、返されたオブジェクトfunction2
を所有delete
し、それが完了したときに責任を負います。繰り返しますが、これは文書化する必要があります。
また、C ++のすべてが値渡しであるというチュートリアルを読みましたか? ポインタを渡すことは参照渡しと呼ばれていませんか?
技術的には、ポインター自体がコピーされるため、ポインターの受け渡しは値渡しです。ただし、ポインターは「参照型」であるため、基本的に参照渡しになります。
C++ も参照 ( int&
) を認識していることに注意してください。これは実際には参照渡しです。