2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

0からの、超初心者C++相談室

1 :デフォルトの名無しさん:2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr.net
何にも知らない0からの出発、超初心者のためのC++相談室

529 :蟻人間 ◆T6xkBnTXz7B0 :2023/10/02(月) 22:18:32.15 ID:/sjCb2h4.net
連投すみません。コピーコンストラクタと、代入もです。

530 :はちみつ餃子 ◆8X2XSCHEME :2023/10/03(火) 00:13:21.44 ID:OUiDjLFt.net
>>524
暗黙に生成される代入演算子は全てのサブオブジェクトを代入したような挙動になるルール。

ポインタを代入した場合には代入元と代入先のポインタが指す先のオブジェクトは同一なので
一方のポインタを通じて delete したならもう一方のポインタからオブジェクトに触れようとしてはならない。
(もう存在しないので。)

この場合は
d3 = Csmp1(400);
としたときに生成される一時オブジェクトはこの式が終わった時点で解体されるので
d3 内にあるポインタはデストラクタで delete 済み、すなわち無効なポインタとなる。
d3 のデストラクタが起動したときはデータメンバ p が指している先は無効なので
無効なポインタをいじったことになって問題が生じる。

それと d3 のコンストラクトのときに new したオブジェクトはどこからも delete されてない。

291 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver.24052200