C++相談室 part96at TECH
C++相談室 part96 - 暇つぶし2ch10:デフォルトの名無しさん
12/06/30 15:47:13.84
>#include <stdafx.h>
大丈夫か…

11:デフォルトの名無しさん
12/06/30 17:16:12.80
>>10


12:デフォルトの名無しさん
12/06/30 19:14:04.69
C++11とか覚えるのしんどいから3行にまとめてほしい(´・ω・`)

13:デフォルトの名無しさん
12/06/30 20:07:11.89
A a(1);
a = A(2);

としたとき、2行目で、1行目で生成されたインスタンスは消滅すると思いますが、
デストラクタは実行されないようです。
実行されるにはどうしたらいいでしょうか?


14:デフォルトの名無しさん
12/06/30 20:09:05.92
代入だからインスタンスaのデストラクタは実行されないよ。
二行目の「A(2)」は、ステートメントの最後でデストラクタが実行されるけど。

15:デフォルトの名無しさん
12/06/30 20:11:56.59
オペレーター=のオーバーロード

16:デフォルトの名無しさん
12/06/30 20:13:06.32
>>12
新しい文法とライブラリ。autoの変更がかなり面白い。
ラムダで広がる関数周り。関数ポインタにもできなく無いらしい。
コンパイラさんの対応にあと5年はかかるかも。

17:デフォルトの名無しさん
12/06/30 20:14:01.69
>>13
2行目で生成されたテンポラリオブジェクト A(2) は消滅するけど
1行目で生成されたインスタンス a はそのままだよ

18:デフォルトの名無しさん
12/06/30 20:14:36.33
>>16
関数ポインタにできるのは引数なしのやつだけかな

19:デフォルトの名無しさん
12/06/30 20:23:57.91
引数じゃなくて変数キャプチャの有無だろ

20:13
12/06/30 20:25:10.61
a = A(2);によって、aの中身はA(2)になっているので、
aが消滅するときのデストラクタはA(2)のものです。
だから、Aの中で動的に領域をとっていると、
解放されないままになってしまいます。
newを使わないインスタンス作成をできなくしたり、
代入を禁止したりはできないでしょうか?
Aにoperator=を作るのが正当な解決策でしょうか?


21:デフォルトの名無しさん
12/06/30 20:28:19.89
>a = A(2);によって、aの中身はA(2)になっているので、
間違い。aの中身はA(2)のコピー。

C#かJavaから来た人かな?

22:デフォルトの名無しさん
12/06/30 20:31:47.85
URLリンク(codepad.org)
デストラクタ呼ばないとかどこの糞コンパイラ使ってんだ

23:デフォルトの名無しさん
12/06/30 20:33:42.75
>>20
コピーと代入を禁止するにはprivateで宣言しておけばいい
何も宣言しないとデフォルトの定義が作られるから代入出来てしまう

private:
  A(const A&);
  A& operator=(const A&);

24:13
12/06/30 20:33:52.52
Clang++です。

25:13
12/06/30 20:41:30.84
24は偽物です。Javaから来ました。
C++は難しいですが、いろいろ試してみます。
ありがとうございました。


26:13
12/06/30 20:55:32.15
>>22 さん、ありがとうございます。
~A1 が表示されてほしいんですが、
代入ではデストラクタが実行されないようなので、
無理ですね。


27:デフォルトの名無しさん
12/06/30 21:09:47.64
URLリンク(ideone.com)
これなら表示される
この例じゃあまり意味はないが

28:デフォルトの名無しさん
12/06/30 21:37:36.80
そもそもどうやってどちらのデストラクタが実行されたかを確認してるかからして怪しい

29:デフォルトの名無しさん
12/06/30 21:44:15.24
>>25
お前にC++は無理。

30:デフォルトの名無しさん
12/06/30 22:26:53.13
むしろ代入の取り扱いに関してはJavaやC#の方が難しいと思うんだけどね。
C++はCやBASIC、FORTRANなどと同じ、コピーが基本。
負荷は大きいけど、考えることは少ない。
一方、Javaは参照が基本。負荷は小さいけど、いつ複製が必要になるかについて注意が必要。

…みたいなことが、確かJ++セルフマスターブックとかいう本を読んだ時書いてあったなぁ。
J++って、いつの本だよ^q^


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch