14/04/15 12:54:41.51 dDf7e/l1
値渡しの引数にconstをつけるのはやりすぎな気がする
void f(const int x) なんてしないでしょ
302:デフォルトの名無しさん
14/04/15 13:09:58.76 tCJ2yelK
する奴いるよ。きっと>296も同じタイプ。
303:KAC
14/04/15 13:26:56.79 OYr23JgA
>>296
なんか違う事書いてるぞ。>289の仕様満たすならconstは*の左。
>>297
どんな所で可読性が落ちるって?
お前がまともに使えないだけじゃないの?
304:デフォルトの名無しさん
14/04/15 14:19:33.38 SFbbbO6x
流れぶった切って悪いんですが
>>251の
c_myclassがインターフェースクラスを継承している場合は
継承元メンバ(インターフェースクラス)に仮想デストラクタを書いておけば良いのですか?
305:デフォルトの名無しさん
14/04/15 14:41:39.21 tCJ2yelK
>>303
>296が言いたいことは、>289の仕様ならconst * string const strだろ。
306:デフォルトの名無しさん
14/04/15 14:42:44.92 tCJ2yelK
いけね、Typo。
string const * const strね。
307:デフォルトの名無しさん
14/04/15 14:59:38.52 JmWJ8ekL
>>304
違いが分かればよいのだが…
URLリンク(ideone.com)
308:デフォルトの名無しさん
14/04/15 15:09:29.49 SFbbbO6x
>>307
さらっと確認したので怪しいのですがたぶん
クラスAには仮想デストラクタが無い為に
newしたオブジェクトがデリートされる際、継承元のデストラクタが呼び出されていませんが、
クラスBは仮想デストラクタがメンバにあるので
deleteされる際に継承元のデストラクタが呼び出される訳ですよね
そこで、ベクターにオブジェクトを格納する話につながる訳ですが
>>251のc_myclassがインターフェースクラスを継承しているときには
やはり継承元のクラスに仮想デストラクタを記述しておかないと危険だという事ですよね?
309:デフォルトの名無しさん
14/04/15 15:27:23.32 JmWJ8ekL
だーね
310:デフォルトの名無しさん
14/04/15 15:32:30.40 SFbbbO6x
確認しつこくてすいませんが
まとめると>>307のdlvBを
dlvB temp
std::vector<dlvB> obj;
obj.push_back(temp);
みたいにしちゃっておkってことですよね
311:デフォルトの名無しさん
14/04/15 18:05:27.38 ef3kTbvB
>>310
そうしたいなら仮想デストラクタとか仮想関数とか関係ない。
コピーコンストラクタを作ればいいだけ。
312:デフォルトの名無しさん
14/04/15 18:37:17.89 u428dFct
std::vector<clsB>にdlvB型のオブジェクトを突っ込むとスライシングでダメになるから気をつけるように
多態をコンテナ内で実現したいならstd::shared_ptrやunique_ptrを入れるのがよい
313:デフォルトの名無しさん
14/04/15 20:01:11.81 Nbqron3B
仮想デストラクタが必須なのは当然として
vectorに突っ込むケースを考えると
難易度としては
vetcor<Base>
vetcor<Base*>
vetcor<shared_ptr<Base>>
ptr_vector<Base>
こんな感じじゃね?
それぞれ注意点はあるが
一見簡単そうに見える
vetcor<Base>
が一番きつい
314:デフォルトの名無しさん
14/04/15 20:12:18.40 MU2KfTCa
>vetcor<Base>
そもそも派生クラスを突っ込めない。
>vetcor<Base*>
所有権がどこにあるのか分からないので論外。
>vetcor<shared_ptr<Base>>
virtualデストラクタ不要で便利。
>ptr_vector<Base>
今更ptr_vector?unique_ptrでいい。
315:デフォルトの名無しさん
14/04/15 20:33:50.00 O7xBtcGx
make_uniqueが標準に入らないと、記述量がちょっと面倒
316:デフォルトの名無しさん
14/04/15 20:42:49.07 Nbqron3B
>>314
たしかに
デザパタで
知らんかった
流行り廃りとかあるの?デザパタで
317:デフォルトの名無しさん
14/04/15 20:49:25.61 aOtL598m
std::unique_ptrはvectorに突っ込めるのにboost::scoped_ptrは出来ないのはなんで?
318:デフォルトの名無しさん
14/04/15 20:54:50.82 tBkVUf7m
moveできないから
319:デフォルトの名無しさん
14/04/15 23:53:29.68 hh7KqCRP
noncopyableだからだろ
320:デフォルトの名無しさん
14/04/15 23:56:04.64 of9IS0B8
ユニポもそうだけど
321:デフォルトの名無しさん
14/04/16 00:00:41.11 cUKcFdx2
>>320
すまん、そうだね、copyかmoveが出来ないとコンテナには入れられないということで