勉強する.

3203 ワード

わからないことを記録する.ほとんどの知識はブログを転載しています.1、RAII手法.(resource acquisitionis initialization(リソース取得は初期化))
template 
class LockGuard
{
public:
    explicit LockGuard(Mutex& m)
        : m_(m)
    {
        m_.Lock();
    }

    ~LockGuard()
    {
        m_.Unlock();
    }

private:
    LockGuard(const LockGuard&);
    LockGuard& operator=(const LockGuard&);
    Mutex& m_;
};

ロックの取得は、オブジェクトを初期化し、コンストラクション関数でロックを取得し、ロックの解放もそのオブジェクトのコンストラクション関数で解放されます.この汎用技術は,構造関数と構造関数の性質,およびそれらと異常処理との相互作用に依存する.
2、scoped locking(ゾーンロック)ゾーンロックとは、ロックを1つのオブジェクトにカプセル化することである.ロックの初期化はコンストラクション関数に配置され、ロックの解放はコンストラクション関数に配置されます.これにより、ロックが役割ドメインから離れると、構造関数は自動的にロックを解放します.実行時に例外が投げ出されても、構造関数は自動的に実行されるため、ロックは自動的に解放されます.典型的な領域ロック:
class Thread_Mutex_Guard 
{
public:
    Thread_Mutex_Guard (Thread_Mutex &lock)
    : lock_ (&lock) 
    { 
        //       ,   -1
        owner_= lock_->lock(); 
    }

    ~Thread_Mutex_Guard (void) 
    {
        //        ,    
        if (owner_ != -1)
            lock_->unlock ();
    }
private:
    Thread_Mutex *lock_;
    int owner_;
};

3、スマートポインタ.(解決対象の破棄問題)利点:(陳碩muduo書のp 14ページ)①shared_ptr制御対象のライフタイム②weak_ptrはオブジェクトの寿命を制御しないが、オブジェクトがまだ生きているかどうかを知っている③shared_ptr/weak_ptrのカウントは主流プラットフォームで原子操作(!!)
スマートポインタの具体的な使用:http://blog.csdn.net/xt_xiaotian/article/details/5714477
コンパイラでは、インテリジェントポインタは実際にはスタックオブジェクトであり、ポインタタイプではありません.スタックオブジェクトのライフサイクルが終了すると、インテリジェントポインタは構造関数によって管理されているスタックメモリを解放します.すべてのスマートポインタにはoperator->オペレータが再ロードされ、オブジェクトを操作するためにオブジェクトの参照が直接返されます.スマートポインタにアクセスする元の方法は「.」を使用します.オペレータ.スマートポインタに含まれる裸のポインタにアクセスするにはget()関数を使用します.スマートポインタはオブジェクトであるためif(my_smart_object)は常に真であり、スマートポインタの裸ポインタが空であるかどうかを判断するにはif(my_smart_object.get()と判断する必要がある.スマートポインタにはreset()メソッドが含まれており、パラメータ(またはNULL)を渡さないと、スマートポインタは現在管理されているメモリを解放します.オブジェクトが渡されると、スマートポインタは現在のオブジェクトを解放し、新しく入力されたオブジェクトを管理します.
4、std::mapリロード[]p 21ページのコードを読むとき
weak_ptr& wkStock = stocks_[key];

関連資料を検索します.
T& operator[] ( const key_type& x );
(*((this->insert(make_pair(x,T()))).first)).second