オペレータnew
のクラスの1つを実装するときは、他のすべてのフォームも実装することをお勧めします。そうでなければ、c++
の直観的な可視性の規則ではないため、悪いことが起こる可能性があります。これらの悪い事は何で、どうやって起こりますか?実装されていないフォームは非表示にできますか?オペレータの新しい実装の可視性の問題
2
A
答えて
1
グローバルオペレータnew
の機能にクラス固有のoperator new
がオーバーロードされているとします。
TL; DR:細かいメモリ制御が必要な場合は、標準コンテナと同様にアロケータのパラダイムを使用することを検討してください。ルールは複雑でエラーが発生しやすいです。
これらのすべてを実装する最も一般的な理由は、混乱している呼び出しコンテキストによるものです。しばしば、クラス固有のnewは、グローバル演算子の観点から実装されます。しかし、これは必須ではないので、あなたは驚くことがあります。
例えば、class A
とclass B
と書いて、割り当てを制御したいとします。 A
とB
の上書きを書きます。あなたのコードの
void *very_clever_allocator(size_t sz);
class A {
void* operator new(size_t sz) {
return very_clever_allocator(sz);
}
};
class B {
void* operator new(size_t sz) {
return very_clever_allocator(sz);
}
};
A善意のユーザーが書いている:
void *operator(size_t sz) {
return incompatible_allocator(sz);
}
誰かが::new A;
とあなたのクラスを割り当てた場合、クラス固有のバージョンは無視されます。したがって、突然、異なるアロケータが使用されます。プログラマは注意しないで、削除を呼び出すかもしれません。注意するので、operator delete
も定義しています。しかし今、あなたのvery_clever_allocator
はこのオブジェクトについて知りません。これはバグを診断するのが難しいでしょう。
これは一般的ではありませんが、これらのルールは非常に複雑なので、通常Allocator
を使用する方が簡単です。あなたがデバッグするコードを書いているのなら、これは一度だけOKです。
続きを読む: https://eli.thegreenplace.net/2011/02/17/the-many-faces-of-operator-new-in-c
関連する問題
- 1. スライディングアップパネルレイアウトリスナの実装。二次レイアウトの可視性の問題。
- 2. OpenERP IEの可視性の問題
- 3. IE7とIE8の可視性の問題
- 4. Windowsフォームの可視性の問題
- 5. ProgressBarの可視性の問題
- 6. mySQLの可視性の問題
- 7. 分析アプリケーションの可視性の問題
- 8. Divのjavascriptでの可視性 - 問題
- 9. レイアウトマネージャの可視性の問題
- 10. スクロールバーFlexでの可視性の問題
- 11. フォームの可視性の問題
- 12. Pexでの可視性の問題
- 13. 多態性の実装の問題
- 14. 更新の可視性は、
- 15. C#での選択的なプロパティ可視性の実装方法
- 16. 文字列から可視性へのコンバータの実装方法
- 17. Androidでのボタンの可視性の問題
- 18. WPF UIデザインの問題 - コントロールの可視性
- 19. リロードUITableViewにUITableViewCellの可視性の問題があります
- 20. JavaFX FXMLアプリの奇妙な可視性の問題
- 21. ASP.net Ajax UpdatePanel子コントロールの可視性の問題
- 22. テーブル行の可視性を変更するASP.netの問題
- 23. カテゴリ実装可能な問題
- 24. [処理/ Java]可視性/レイヤー化の問題
- 25. イメージボタンの可視性に問題があります。 Android
- 26. クイックソートの実装の問題
- 27. TPLの実装の問題
- 28. ニューラルネットワークバックプロパゲーションの実装の問題
- 29. ZipオペレータでRxJavaの問題
- 30. VTKボリュームの可視化の問題