うらおブログ(移転しました)スマートフォン用の表示で見るやねうらおブログ(移転しました)この広告は、90日以上更新していないブログに表示しています。7月号のひなた先生で気になったところについて指摘をいただいた。smart_ptrとは?まず読者のために前説。ここで出てくるsmart_ptrというのは、yaneSDK3rdに実装されている、smart_ptrのことである。指摘1つまりはそのsmart_ptrにポインタを渡す時に「アップキャストされていない本来の型」のポインタとして渡す必要があるぢゃないかと。私のsmart_ptrを用いる場合、newはsmart_ptrのコンストラクタ以外のところでは書かないというコーディング方針を守る必要があります。(循環参照の問題があるのでboost::weak_ptrに相当するものがあるべきだとは思います。>(以下、ptr_vectorと呼ぶ)を使うというのは現実的だと思います。プログラマは、コンテナのデザイン自体を自分で決定できるとは限りません。Hoge[n]と書いた場合、n個のオブジェクトは自動的にリニアなメモリに配置されますから、おそらく一番配列に関して多用されるコンテナデザイン(メモリ上のイメージと呼ぶべき?)は、この形です。それゆえ、DLL側にHoge*が引数として渡ってきて、自分がそのDLLを書かなければならない、などということは度々起こりえます。これはptr_vectorでは解決にならないのです。「ptr_vectorがHoge配列のそれぞれの要素、すなわちHoge[0],Hoge[1],...,Hoge[n-1],Hoge[n]を指し示すようにすればいいじゃないか」(※1)と言われるかも知れませんが、これは.NETでmanagedとunmanagedのコードの間で行なわれるマーシャリングにも似ていて、このオーバーヘッドが馬鹿にならない場合があります。Tの派生型のS型の配列があった場合、Sの配列のそれぞれの要素をptr_vectorから上記の※1のように指し示すようなコードが必要になります。成り立たないため、結局sizeof(S)がわからない限り、上記の※1を行なうことは出来ません。(※2)つまり、このようにオブジェクトの配列が渡されてくるケースでsizeof(S)がわからないなら、smart_ptrはもちろん、ptr_vectorも無力なのです。>を使う(ならば解決するだろう)』というスタンスとにはそこはかとなく矛盾を感じます。結論smart_ptrは特定の条件下においては「ptr_vectorを用いたなら※1にかかるはずのコスト」を省略できるわけですから、smart_ptrの万能性を否定してもsmart_ptrの有効性の否定にはつながらないです。要するに、smart_ptrは、使える状況があると思うなら使ってくださいってなところで。電子書籍になるに至るまでの話ブログちょっとだけ移転のお知らせ時代はまだゲームセンターあらしに追いつかないのかやねうら王、電王戦バージョン提出しました将棋の神様のレーティングはいくつなのか?月別アーカイブはてなブログをはじめよう!yaneuraoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。