7

組み込みシステムで C++ の基本クラスとサブクラス (わかりやすくするために A と B と呼びましょう) を使用しています。

時間とスペースが重要なので、最小限にする必要があります。

コンパイラは、仮想デストラクタの欠如について不平を言いますが、これは私が理解していることB* ですA*.

しかし、このクラスのインスタンスを割り当てるつもりはありません。operator new()いずれかのクラスの動的割り当てがない場合にコンパイルするようにオーバーロードできますが、エンド ユーザーが A または B の新しいインスタンスを割り当てようとするとコンパイル エラーが発生する方法はありますか?

プライベート コンストラクターを介して自動コンパイラ コピー コンストラクターを "中毒" する一般的な手法と同様のアプローチを探しています。(例: http://channel9.msdn.com/Forums/TechOff/252214-Private-copy-constructor-and-private-operator-C )

4

3 に答える 3

9

operator newコピー コンストラクタと同じ方法でポイズニングできます。配置 new をポイズンしないように注意してください。仮想デストラクタは依然として優れた推奨事項です。

int main() {
    char data[sizeof(Derived)];
    if (condition)
        new (data) Derived();
    else
        new (data) Base();
    Base* ptr = reinterpret_cast<Base*>(&data[0]);
    ptr->~Base();
}
于 2011-06-07T21:03:31.987 に答える
2
class A
{
private:
    void *operator new(size_t);
    ...
};

省略記号は、クラスのその他のオーバーライドoperator newと残りのクラス用です。

于 2011-06-07T21:04:15.450 に答える
0

オペレーターを新しいプライベートにするだけです

于 2011-06-07T21:08:03.653 に答える