2016-03-28 6 views
-5

新しい演算子をオーバーロードしてプライベートにすると、新しい演算子を呼び出すことができません。オブジェクトが常にC++でスタックに確保されるようにする方法

しかし、新しく呼び出されたとしても、私はオブジェクトをスタックに割り当てたいと言うことができます。出来ますか ?

+0

を、このためのユースケースは何ですか? –

+0

'operator new'をオーバーロードして、スタック上のメモリプールを使用することができます。 – vsoftco

+3

C++には「スタック」はありません。タイプは、一般に、そのインスタンスの記憶期間を制御することができない。 (例:グローバル変数を考慮してください) –

答えて

1

は答えのいくつかの種類にコメントをロールアップ:

しかし、私は、オブジェクトがスタックに割り当てたいと呼ばれる新しいとさえ言うことができます。出来ますか ?

厳密に言えば、C++メモリモデルにはスタックの概念はありませんが、オブジェクトが動的に割り当てられないようにすることを意味します。

短い答えは「いいえ、それを防ぐことはできません」です。カスタムnewで複雑なトリックさえあなたを助けてくれません。

これは不愉快な回答のように見えるかもしれませんが、実際には良いことです。オブジェクトの機能は、その存続期間と保管場所とは別の問題です。オブジェクトに寿命を指示することを許可すると、2つの問題が混在し、オブジェクトの有用性が低下します。

パフォーマンスを向上させる(または保証する)ためにスタックにオブジェクトを動的に割り当てる場合は、そのジョブ用のカスタムアロケータを作成することをお勧めします。すなわち、カスタムアロケータは、あなたのクラスのモデルをその場で構築することができるメモリのブロックを含むことができる。

アンドレイアレキはこれに良い講演を行いました:https://www.youtube.com/watch?v=LIb3L4vKZ7U

関連する問題