0

関数間またはオブジェクト間でポインターを渡したり、それらを返したりすることについてお聞きしたい..一般的にポインターを渡したり返したりすること(配列またはオブジェクト、またはそれらが指しているものを指しているかどうか)は安全ではなく、出力保証されません。

今、私はそれを試してみましたが、これまでのところすべて問題ないようですが、プロジェクトが偶然に機能することは望ましくありません..だから誰かが私に説明して、ポインタを渡したり返したりしない理由と、提案された解決策は何ですか(たとえば、別のオブジェクトの関数で同じオブジェクト( object1 など)を変更したい場合(object2の関数func))?

また、C ++のすべてが値渡しであるというチュートリアルを読みましたか? ポインタを渡すことは参照渡しと呼ばれていませんか?

みんなありがとう。

4

2 に答える 2

2

関数間またはオブジェクト間でポインターを渡したり、それらを返したりすることについてお聞きしたい..一般的にポインターを渡したり返したりすること (配列またはオブジェクト、またはそれらが指しているものを指しているかどうか) は安全ではなく、出力は保証されません。

それはどこから入手したのですか?一般に、それは真実ではなく、もちろんポインターを渡すことができます。

注意が必要なのは、(ヒープに割り当てられた) オブジェクトの所有権を管理することです。これは、どこかでメモリを再度解放する必要があるためです。つまり、 でメモリを割り当てるとnew、 で再度解放する必要がありますdelete

例:

A* function1(A* a) {
    return a;
}

B* function2(B* b) {
    return new B(b);
}

function1既存のポインタを返します。渡されたオブジェクトを所有していた人は誰でもA、同じであるため、返されたオブジェクトも所有します。この知識はfunction1!

function2B入力引数をコピーしてクラスの新しいオブジェクトを作成します。誰が呼び出しても、返されたオブジェクトfunction2所有deleteし、それが完了したときに責任を負います。繰り返しますが、これは文書化する必要があります。

また、C ++のすべてが値渡しであるというチュートリアルを読みましたか? ポインタを渡すことは参照渡しと呼ばれていませんか?

技術的には、ポインター自体がコピーされるため、ポインターの受け渡しは値渡しです。ただし、ポインターは「参照型」であるため、基本的に参照渡しになります。

C++ も参照 ( int&) を認識していることに注意してください。これは実際には参照渡しです。

于 2013-10-27T07:07:12.540 に答える