2017-01-16 17 views
2

何の::行内で:return :: operator new(size、:: std :: nothrow); 、なぜこのような::グローバルoperator newoperator delete関数が呼び出されることを意味するスコープ解決演算子を使用したテンプレート型TC++のスコープ解決演算子についての混乱

template<typename T> 
class DefaultMemoryAllocator 
{ 
public: 
    static inline void *Allocate(size_t size) 
    { 
    return ::operator new(size, ::std::nothrow); 
    } 
    static inline void Deallocate(void *pointer, size_t size) 
    { 
    ::operator delete(pointer); 
    } 
}; 
+1

"スコープ解決演算子"です。そのタイプの理由はここで説明されていますhttp://stackoverflow.com/questions/4173254/what-is-the-curiously-recurring-template-pattern-crtp – StoryTeller

答えて

1

のための使用がない場合クラスのように、テンプレートを使用していますそのクラスのためにオーバーライドされたかもしれないものに反対しています。

この関数はメモリポリシークラスの一部であり、オーバーライドされた関数の 'operator newoperator deleteから呼び出されます。

+0

なぜクラスがテンプレートを使用していないときにテンプレートを使用しているのですか?タイプT? – tohidprogram

+2

@tohidprogramクラスがどこで使われているかを共有していれば、それは簡単かもしれません。 – Angew

+0

それは、不思議な繰り返しのテンプレートパターン(CRTP - Google)に基づいたポリシータイプのフレームワークのスニペットのようです。 *特定のメンバ関数は 'T'を使用しませんが、他のメンバ関数はおそらく行います。 – Bathsheba

関連する問題