私はosx 10.8.4の下にあり、homebrewを使用してgdb 7.5.1をインストールしました(動機は--with-pythonなどの新しい機能を備えた新しいgdbを取得します...) 私が得るc ++ Eclipseプロジェクト内でデバッグを実行すると、長い話は短くなります: Error in final launch sequence Failed to execute MI command: -exec-run Error message from debugger back end: Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8)) Unable to find Mach task port for …
C ++クラス(またはその親クラスのいずれか)に少なくとも1つの仮想メソッドがあることは、クラスに仮想テーブルがあり、すべてのインスタンスに仮想ポインターがあることを意味します。 したがって、メモリコストは非常に明確です。最も重要なのは、インスタンスのメモリコストです(特に、インスタンスが小さい場合、たとえば、単に整数を含めることを意図している場合)。この場合、すべてのインスタンスに仮想ポインタがあると、インスタンスのサイズが2倍になる可能性があります。仮想テーブルが使用するメモリ領域。実際のメソッドコードが使用する領域と比較すると、通常は無視できると思います。 これは私に私の質問をもたらします:メソッドを仮想化するために測定可能なパフォーマンスコスト(つまり速度への影響)はありますか?すべてのメソッド呼び出し時に、実行時に仮想テーブルでルックアップが行われるため、このメソッドへの呼び出しが非常に頻繁であり、このメソッドが非常に短い場合、測定可能なパフォーマンスヒットがある可能性があります。それはプラットフォームに依存すると思いますが、誰かがいくつかのベンチマークを実行していますか? 私が尋ねている理由は、プログラマーが仮想メソッドの定義を忘れているために起こったバグに遭遇したからです。私がこの種の間違いを見たのはこれが初めてではありません。そして、私はそれが必要でないことが確実であるときに仮想キーワードを削除するのではなく、なぜ必要なときに仮想キーワードを追加するのかと考えました。パフォーマンスコストが低い場合は、チームで以下をお勧めします。デストラクタを含むすべてのメソッドをデフォルトで仮想化し、すべてのクラスで、必要な場合にのみ削除します。気が狂ってる?
私はhttp://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.htmlを読んでいますが、いくつかのスレッドセーフティの問題はまだわかりません: 標準では、参照カウントがスレッドセーフで処理され、プラットフォームに依存しないことが保証されています。 同様の問題-標準では、1つのスレッド(最後の参照を保持している)のみが共有オブジェクトで削除を呼び出すことが保証されていますよね? shared_ptrは、それに格納されているオブジェクトのスレッドセーフを保証しませんか? 編集: 疑似コード: // Thread I shared_ptr<A> a (new A (1)); // Thread II shared_ptr<A> b (a); // Thread III shared_ptr<A> c (a); // Thread IV shared_ptr<A> d (a); d.reset (new A (10)); スレッドIVでreset()を呼び出すと、最初のスレッドで作成されたAクラスの以前のインスタンスが削除され、新しいインスタンスに置き換えられますか?さらに、IVスレッドでreset()を呼び出した後、他のスレッドには新しく作成されたオブジェクトのみが表示されますか?
C ++ DLLとの間でクラスオブジェクト、特にSTLオブジェクトを渡すにはどうすればよいですか? 私のアプリケーションはDLLファイルの形式でサードパーティのプラグインとやり取りする必要があり、これらのプラグインがどのコンパイラでビルドされるかを制御できません。STLオブジェクトの保証されたABIがないことを承知しており、アプリケーションを不安定にすることを心配しています。
std::binary_search標準ライブラリの<algorithm>ヘッダーのようなC ++ STLコンテナーと互換性のあるバイナリ検索アルゴリズムが必要ですが、要素が存在するかどうかを示す単純なブール値ではなく、結果を指すイテレーターを返す必要があります。 (補足として、binary_searchのAPIを定義したとき、標準委員会は一体何を考えていましたか?) ここでの主な懸念は、バイナリ検索の速度が必要であることです。そのため、以下で説明するように、他のアルゴリズムでデータを見つけることができますが、データがソートされているという事実を利用して、バイナリの利点を得たいと思います。線形検索ではなく検索。 これまでlower_boundとupper_boundデータが欠落している場合失敗します。 //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 注:コンテナーと互換性がある限り、std名前空間に属さないアルゴリズムを使用しても問題ありません。同様に、言いますboost::binary_search。
#include <algorithm> #include <Windows.h> int main() { int k = std::min(3, 4); return 0; } Windows.hをインクルードした場合、ウィンドウは何をしますか?std::minVisual Studio 2005 では使用できません。エラーメッセージは次のとおりです。 error C2589: '(' : illegal token on right side of '::' error C2059: syntax error : '::'