- 1 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 00:45:54.57 ID:VoemgV7u]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.89【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1390171944/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
- 301 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 12:54:41.51 ID:dDf7e/l1]
- 値渡しの引数にconstをつけるのはやりすぎな気がする
void f(const int x) なんてしないでしょ
- 302 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 13:09:58.76 ID:tCJ2yelK]
- する奴いるよ。きっと>296も同じタイプ。
- 303 名前:KAC mailto:sage [2014/04/15(火) 13:26:56.79 ID:OYr23JgA]
- >>296
なんか違う事書いてるぞ。>289の仕様満たすならconstは*の左。 >>297 どんな所で可読性が落ちるって? お前がまともに使えないだけじゃないの?
- 304 名前:デフォルトの名無しさん [2014/04/15(火) 14:19:33.38 ID:SFbbbO6x]
- 流れぶった切って悪いんですが
>>251の c_myclassがインターフェースクラスを継承している場合は 継承元メンバ(インターフェースクラス)に仮想デストラクタを書いておけば良いのですか?
- 305 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:41:39.21 ID:tCJ2yelK]
- >>303
>296が言いたいことは、>289の仕様ならconst * string const strだろ。
- 306 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:42:44.92 ID:tCJ2yelK]
- いけね、Typo。
string const * const strね。
- 307 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:59:38.52 ID:JmWJ8ekL]
- >>304
違いが分かればよいのだが… ideone.com/w9UqT0
- 308 名前:デフォルトの名無しさん [2014/04/15(火) 15:09:29.49 ID:SFbbbO6x]
- >>307
さらっと確認したので怪しいのですがたぶん クラスAには仮想デストラクタが無い為に newしたオブジェクトがデリートされる際、継承元のデストラクタが呼び出されていませんが、 クラスBは仮想デストラクタがメンバにあるので deleteされる際に継承元のデストラクタが呼び出される訳ですよね そこで、ベクターにオブジェクトを格納する話につながる訳ですが >>251のc_myclassがインターフェースクラスを継承しているときには やはり継承元のクラスに仮想デストラクタを記述しておかないと危険だという事ですよね?
- 309 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 15:27:23.32 ID:JmWJ8ekL]
- だーね
- 310 名前:デフォルトの名無しさん [2014/04/15(火) 15:32:30.40 ID:SFbbbO6x]
- 確認しつこくてすいませんが
まとめると>>307のdlvBを dlvB temp std::vector<dlvB> obj; obj.push_back(temp); みたいにしちゃっておkってことですよね
- 311 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 18:05:27.38 ID:ef3kTbvB]
- >>310
そうしたいなら仮想デストラクタとか仮想関数とか関係ない。 コピーコンストラクタを作ればいいだけ。
- 312 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 18:37:17.89 ID:u428dFct]
- std::vector<clsB>にdlvB型のオブジェクトを突っ込むとスライシングでダメになるから気をつけるように
多態をコンテナ内で実現したいならstd::shared_ptrやunique_ptrを入れるのがよい
- 313 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:01:11.81 ID:Nbqron3B]
- 仮想デストラクタが必須なのは当然として
vectorに突っ込むケースを考えると 難易度としては vetcor<Base> vetcor<Base*> vetcor<shared_ptr<Base>> ptr_vector<Base> こんな感じじゃね? それぞれ注意点はあるが 一見簡単そうに見える vetcor<Base> が一番きつい
- 314 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:12:18.40 ID:MU2KfTCa]
- >vetcor<Base>
そもそも派生クラスを突っ込めない。 >vetcor<Base*> 所有権がどこにあるのか分からないので論外。 >vetcor<shared_ptr<Base>> virtualデストラクタ不要で便利。 >ptr_vector<Base> 今更ptr_vector?unique_ptrでいい。
- 315 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:33:50.00 ID:O7xBtcGx]
- make_uniqueが標準に入らないと、記述量がちょっと面倒
- 316 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:42:49.07 ID:Nbqron3B]
- >>314
たしかに デザパタで 知らんかった 流行り廃りとかあるの?デザパタで
- 317 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:49:25.61 ID:aOtL598m]
- std::unique_ptrはvectorに突っ込めるのにboost::scoped_ptrは出来ないのはなんで?
- 318 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:54:50.82 ID:tBkVUf7m]
- moveできないから
- 319 名前:デフォルトの名無しさん [2014/04/15(火) 23:53:29.68 ID:hh7KqCRP]
- noncopyableだからだろ
- 320 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 23:56:04.64 ID:of9IS0B8]
- ユニポもそうだけど
- 321 名前:デフォルトの名無しさん [2014/04/16(水) 00:00:41.11 ID:cUKcFdx2]
- >>320
すまん、そうだね、copyかmoveが出来ないとコンテナには入れられないということで
|

|