C++ではオブジェクトと言う言葉がよく使われます。オブジェクトとはデータの かたまりのことです。関数はこのオブジェクトを使っていろんな操作を行います。 オブジェクトを関数で使うとき引数にそのオブジェクトを指定すると、コピーが 作られ、関数が実行された後コピーが廃棄される様子を示すプログラムを見てく ださい。コンパイルは以下のコマンドで行います。
g++ fun-obj.cc -o fun-obj
これを実行するとg++では3回もデストラクターが呼ばれることが分かります。 C++のオブジェクトはプログラムの使用者の都合によってデータの長さが変わる ことが多いのでメモリーを動的に割り付けることが多くなります。文字列データ などがその例です。関数でオブジェクトを使う場合には次の3つの方法によって 動的割り当てに伴うデストラクターの多重呼出に伴う問題を避けることができます。 このうち最初の二つはコピーが作られません。最後のコピーコンストラクターを 使う方法はコピーは作られるが、関数が呼ばれたとき、コピー用のオブジェクトを作るので呼 ばれた関数の終了処理でメモリーを開放しても問題ないわけです。