2013-05-16 4 views
13

C++ 11 N3485 5.3.5.1それは言う:[deleteの】C++ 11クラスの種類を削除しますか?で

オペランドがタイプまたはクラスタイプをオブジェクトへのポインタでなければなりません。クラス型の場合、オペランドはオブジェクト型へのポインタにコンテキスト変換されます。

このような使用法の例(オペランドはクラスタイプ)は何ですか?

+0

有用かどうかを示す例や例はありますか? – zch

+0

いずれも行いますが、便利です。 –

+0

誰もが知っている、なぜn3376とn3485の間で言葉遣いが変わったのですか?関連する情報が見つかりません... – ForEveR

答えて

10

クラス型の場合、オペランドは暗黙的にオブジェクト型へのポインタ に変換されます。

したがって、オブジェクトにはdeleteを使用できますが、この型に暗黙の変換演算子がポインタの場合にのみ使用できます。

class A 
{ 
public: 
    class Inner {}; 
    A() 
    { 
     inner = new Inner(); 
    } 
    operator Inner*() { return inner; } 
private: 
    Inner* inner; 
}; 

int main() 
{ 
    A* a = new A(); 
    delete *a; 
    delete a; 
} 

しかし、それはC++ 03標準があり、ほぼ同じ言葉で、C++ 11の新機能ではありません

オペランドは、ポインタ タイプ、または単一を持つクラス型を持たなければなりません変換関数(12.3.2)をポインタ型に変換します。

+0

ああ、意味があります。ありがとう。 –

+0

私はそれがポインターラッパーで使用されることを意図していると思います。 – riv

+2

Yikes .......... –

関連する問題