
項目 12:オーバライドする関数は override と宣言する
|
75
このような制限はありません。クラス外でも delete 可能です(つまり名前空間スコープ)。
class Widget {
public:
…
template<typename T>
void processPointer(T* ptr)
{ … }
…
};
template<> // still
void Widget::processPointer<void>(void*) = delete; // public,
// but
// deleted
public のまま delete
実のところを言えば、C++98 での、関数を private と宣言し定義はしないという方法は、C++11
の「delete された関数」を実現するための試行でした。この方法は本物には及ばない模倣に過ぎま
せん。クラス外では使えませんし、クラス内でも常に使える訳ではなく、使える場合でもリンクす
る時まで活躍してくれません。delete の使用がお勧めです。
重要ポイント
•
関数を private な未定義とするよりも delete の使用を優先する。
•
非メンバ関数、テンプレートのインスタンス化も含め、どんな関数でも delete できる。
項目 12:オーバライドする関数は override と宣言する
C++ のオブジェクト指向プログラミングの世界では、クラス、継承、仮想関数が大活躍します。
この世界では、派生クラスでの仮想関数の実装が、基底クラス(ベースク ...