タグ

shared_ptrに関するiwwのブックマーク (7)

  • std::string の正体(gcc-4.4.3)と細かい話 - やた@はてな日記

    # 環境依存な内容な上,無駄に細かい話なので,「そういうこともあるかもねー」くらいに流しちゃってください. (追記 2011-01-11)新しい規格では std::string の Copy on Write(CoW: 書き込み時に複製)が実質禁止になるとのことです.後,gcc 4.5 の時点で CoW はやめてしまうみたいですし,「そんな時代もあった」くらいに軽く流しちゃってください.id:gintenlabo さん,コメントありがとうございます. (追記の続き)個人的には,std::string の CoW 動作は挙動が分かりにくくなるので止める方に賛成です.でも,std::vector なんかを拡張するときはどうするのかな…?コピーしてしまうのか,swap() を使うようにするのか…. (さらに追記 2011-01-11)おおっと,ムーブコンストラクタにムーブ代入演算子なんてものが…

    std::string の正体(gcc-4.4.3)と細かい話 - やた@はてな日記
  • shared_ptr

    iww
    iww 2012/09/12
    『名前のない一時的な shared_ptr を使ってはならない。 』
  • shared_ptr は使いづらい: uyota 匠の一手

    初めて shared_ptr を見たときは、随分と便利そうだと思った。しかし、実際に使ってみるとあまり使い勝手は良くない。既に使ってあったのを細かく調べてみると、あちらこちらにバグが散在している。性能的なバグから、機能的なバグまでてんこ盛り。マルチスレッドやロックを考えると自分でメモリを管理した方が断然楽だ。 一番多かったのが、shared_ptr 型を直接関数に渡す、性能的なバグ。 void function( shared_ptr< Object > obj ) の様な形で渡すと、関数が呼ばれる度に shared_ptr のオブジェクトが生成され、参照回数が更新される。 void function( const shared_ptr< Object >& obj ) 何も余計なことをしなくても、const 参照で充分な関数がほとんど。こちらに変えるだけで、関数呼び出しの余計な負荷が押さ

  • shared_ptr の排他制御を抑止する。 | 株式会社きじねこ

    スマートポインタ boost::shared_ptr は非常に便利であり、おそらく Boost C++ Libraries の中でもっとも多く使われている機能のひとつです。boost::shared_ptr は、普通は何も考えずにデフォルトのまま使っていても問題はないのですが、いざ効率のことを考え始めると、問題点が浮き上がってきます。 shared_ptr はスレッドセーフな設計がされており、参照カウンタの増減の際は当然排他制御が行われます。排他制御を行うかどうかは、Boost.Config で決定するわけですが、Visual C++ 2005 のようにシングルスレッドをサポートしない処理系では、常に排他制御が行われることになります。 しかし、現実には、シングルスレッドで十分なアプリケーションも多数ありますし、仮にマルチスレッドであったとしても、shared_ptr をスレッド間で共有する

  • letsboost::shared_ptr

    sample サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0] #include <string> #include <vector> #include <iostream> #include <boost/shared_ptr.hpp> using namespace std; int main() { typedef boost::shared_ptr<string> StrPtr; StrPtr s = StrPtr(new string("pen")); vector< StrPtr > v; // vectorに入れたり。 v.push_back( StrPtr(new string("this")) ); v.push_back( StrPtr(new string("is")) ); v.push_back( StrPtr(new str

  • スマートポインタのつくりかた - 貳佰伍拾陸夜日記

    2年ちょっと前にC++で書いた非侵入的参照カウント方式のスマートポインタ実装を発掘した. スマートポインタの実装にはC++の様々なマニアックな実装手法が隠れていて面白い. せっかくなので, 解説つきで晒すことにした. このスマートポインタはboost::shared_ptr (以下単にshared_ptr)相当のもので, 当時C++のコードを書かないといけない状況下で「boost使っちゃらめぇぇぇ!」とか言われたために, せめてshared_ptrだけでも抜き出して使おうとしたものの, 依存しているファイルの数が思ったより多くて面倒になったので, 1ファイルで完結する簡易実装を自分で書くことにした, という経緯で生まれたもの. 似たような状況では有用かも知れないし, shared_ptrのソースコードを読む助けにはなるかも知れないけれど, 基的にはboostが使えるなら素直にshared

    スマートポインタのつくりかた - 貳佰伍拾陸夜日記
  • とあるvoid *とboost::shared_ptr

    d金魚 @studiokingyo shared_ptr<void>ってnew POD[size]しか受け付けないのかな?えらく使いにくそうなイメージ RT @decimalbloat void*を挙げるぐらいならshared_ptr<void>をオススメします! 2010-09-08 01:07:56

    とあるvoid *とboost::shared_ptr
  • 1