[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
653
(3): デフォルトの名無しさん [sage] 2017/05/23(火) 09:20:18.86 ID:J4YcG+3k(1) AAS
>>651
651(2): デフォルトの名無しさん [sage] 2017/05/23(火) 00:42:13.85 ID:9/IkIyOw(1) AAS
ちょっとした確認なんだけどさ、
デストラクタが空っぽ (デフォルトデストラクタ) でもオブジェクトを後始末するための何らかの処理はするよね?

よくあるスライシングの問題で、

・クラス A をクラス B が継承している
・クラス A のデストラクタは virtual が付いていない
・クラス B のデストラクタはデフォルトデストラクタ
・クラス B はメンバ変数を持っていない
・B* を A* にキャストしたものを delete

という状況だと見かけ上はクラス B のオブジェクトには後始末すべきものは何もないように見えるけど、
デストラクタが呼ばれないのはやっぱあかんよな?
はい
規格上もデストラクタがvirtualでないBのオブジェクトをA*に入れてdeleteした場合未定義動作だよ
656
(2): デフォルトの名無しさん [] 2017/05/23(火) 12:45:18.14 ID:hcbwXZ+h(1) AAS
>>653
横からだけど、それまじ?
出来れば、規格で書かれてる場所教えて欲しい。

不安に思いながらも、一個作っちゃったんだよな…
動作確認済みだから、直ちに問題があるわけではないんだけど、未定義と聞くと将来的には修正しておきたい…
660
(1): 653 [sage] 2017/05/23(火) 15:21:53.55 ID:Ek6JChT/(1) AAS
>>656
俺もworking draftしかないけどn3690の5.3.5の3段落目

In the first alternative (delete object), if the static type of the object to be deleted is different from its
dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the
static type shall have a virtual destructor or the behavior is undefined.
721: 653 [sage] 2017/06/17(土) 16:42:18.70 ID:YXyzn6OG(1) AAS
それ戻り値がvoidだからじゃ

vs2015で試したら添字演算子の結果を使わなければvoidのままでも動いたし
戻り値返すようにしたら普通の使い方もできたよ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.041s