new/delete new[]/delete[] について

C++
0
hohehohe2 @hohehohe2

@yusukei それはそうやねー。> 結局はdeleteが見られる場所にないといけないわけで

2010-03-22 00:12:03
hohehohe2 @hohehohe2

@yusukei new/deleteの実装考えたら配列かどうかわかってると効率のいい実装ができるんかなと思う。

2010-03-22 00:13:36
しょーま @shomah4a

@hohehohe2 静的に決められるのは継承元クラスのサイズだけな気がします

2010-03-22 00:14:45
しょーま @shomah4a

delete だと配列要素のデストラクタが呼ばれなかったりするのかなとか思ったけど、検証しないとわからん

2010-03-22 00:15:26
Yusuke Ishikawa @yusukei

@hohehohe2 C++はクラスによってサイズまちまちだし、アロケータの実装次第だけど、それほど配列かどうかって重要でもない気もするけどどうなんだろう・・・

2010-03-22 00:16:07
Yusuke Ishikawa @yusukei

@shomah4a あ。それあったきがする>デストラクタ

2010-03-22 00:16:36
隅須正昭 @nagoya313

みんなの大好きな未定義 RT @shomah4a: delete だと配列要素のデストラクタが呼ばれなかったりするのかなとか思ったけど、検証しないとわからん

2010-03-22 00:18:21
hohehohe2 @hohehohe2

@yusukei @shomah4a 配列要素のデストラクタが呼ばれない以前にメモリが解放されないんとちゃう?

2010-03-22 00:18:32
しょーま @shomah4a

継承元クラスのポインタに導出クラスの配列を突っ込んで delete[] とかやったら動作未定義っぽい気がする

2010-03-22 00:18:50
hohehohe2 @hohehohe2

@shomah4a @yusukei そこのメモリは「配列じゃないよ」と言ってるんやから。

2010-03-22 00:19:13
Yusuke Ishikawa @yusukei

@shomah4a @hohehohe2 でも、要素数もdeleteが分かればいいわけで、それが理由になる実装上の理由がわからん

2010-03-22 00:19:23
Yusuke Ishikawa @yusukei

@hohehohe2 gccとかだと[0]要素のみ開放でvcだと全部開放してくれちゃったはず。実装依存。

2010-03-22 00:20:29
hohehohe2 @hohehohe2

@yusukei あーやっと意味わかった。deleteがdelete[]兼ねてしまえばいいってことね。

2010-03-22 00:20:40
しょーま @shomah4a

そもそも new [] で確保した領域に delete したら abort した gcc4.4.1

2010-03-22 00:21:04
Yusuke Ishikawa @yusukei

@hohehohe2 そそ。一々smart_ptrの実装を分けないといけないのが面倒だし

2010-03-22 00:21:35
Yusuke Ishikawa @yusukei

@shomah4a その結果のgccとVCでの結果が見てみたい。今頃コード書いてそうだから結果よろw

2010-03-22 00:22:26
Yusuke Ishikawa @yusukei

VCってそういうところ良くも悪くも親切設計だよなぁ

2010-03-22 00:23:22
Yusuke Ishikawa @yusukei

@shomah4a なるwww俺も入ってねぇよwww

2010-03-22 00:23:44
hohehohe2 @hohehohe2

@yusukei @shomah4a 最適化な気がする。C++っぽいし。

2010-03-22 00:24:31
hohehohe2 @hohehohe2

@yusukei まじっ、 > vcだと全部開放してくれちゃったはず

2010-03-22 00:24:46
しょーま @shomah4a

@yusukei @hohehohe2 開放はされるけれどデストラクタ呼び出しなんかは検証をしていないのでわからないですね

2010-03-22 00:27:12