問題タブ [stdlist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - オブジェクトをstd::listに追加するときにデストラクタがオブジェクトを呼び出しました
Fooオブジェクトと、そのインスタンスを保持するstd::listがあります。私の問題は、リストに新しいインスタンスを追加すると、最初にctorが呼び出され、次にdtorも呼び出されることです。次に、別のインスタンスのdtor(このポインターによる)。
単一のインスタンスがリストに追加されますが、そのdtor(およびその親)が呼び出されるため、オブジェクトは期待どおりに使用できません。
問題を説明するためのいくつかの簡略化されたコードを次に示します。
c++ - C++ のオブジェクトで標準ライブラリ リストを push_front() できません
クラスがあり、標準ライブラリ リストを使用してそれらのリストを保存したいと考えています。基本的に、リストを push_front() したい。だから私のコードは次のようになります:
しかし、コンパイラは次のエラーをスローします。
エラー: 非クラス型 'std::list<complexNode, std::allocator<complexNode> > ()()' である 'complexList' のメンバー 'push_front' の要求
クラス complexNode にはコピー コンストラクターがあります。
問題とそのエラーが実際に何を意味するのか本当にわかりません...助けてください!
c++ - C++ std::list<> に大きなデータを保存する..参照カウントを使用する必要がありますか?
人々は通常、大きなオブジェクトのリストをコピーすることをどのように管理していますか?
これが私の状況です:
現在、私はこれを持っています:
そして、私はそれを
Image.size() は非常に大きいです (それぞれが 3 ~ 5 MB です)。
リストを渡します (コピーします)。
std::vector が各要素を値でコピーするという私の理解は正しいですか? もしそうなら、コピーが多すぎてパフォーマンスが少しひどいのではないでしょうか?
コピーを最小限に抑えるにはどうすればよいですか? 代わりに保存する必要がありますか
どこ
?
この種の問題を処理するエレガントな方法は何ですか?
c++ - std::listを介した反復でのアイテムのポインタ
私は非常に基本的なゲームに取り組んでおり、ゲームに関連するオブジェクトのstd::listコレクションがあります。私はそれを次のように宣言しました:
私がそれを繰り返すとき、
GUIでオブジェクトが更新されていません。ただし、反復ループを。に置き換えるとtargets.front().move()
、1つのオブジェクトが正しく移動します。これは、ポインターを使用してコレクションを反復処理していないためだと思います。誰かがそれがどのように行われるかを説明できますか?ありがとう。
c++ - C++リンクリストの動作
私はいくつかのCコードを持っています。そこには2つのリンクリスト(たとえばAとB)があり、Aは特定の位置でBに挿入され、Aにはまだ要素があります。
C ++ STLを使用して同じ動作を効果的にシミュレートするにはどうすればよいですか?スプライスを試してみると、2番目のスプライスが空になります。
ありがとう、ゴクル。
multithreading - マルチスレッドの破損バグのデバッグに役立つ無料のツールや戦略は何ですか?
マルチスレッドのクライアント サーバー アプリケーションがあります。サーバー側で std::list が破損し、SEGV が発生します。2 つのスレッドが同時に std::list を更新し、それが破損する原因となる、ある種のクロススレッド タイミングの問題が発生していると思われます。
これを追跡するための無料のツールや役立つ戦略を提案してください。
c++ - std::listを読み取り専用として公開する
とりわけ、std::listを含むクラスがあります。このリストを公開したいのですが、構造とそれに含まれるデータが読み取り専用であり、イテレーターで使用できるようにする場合に限ります。
私がそれを「機能する」ATMにする方法は、リストのコピーを返すことです。これにより、クラスは「安全」になりますが、もちろん、呼び出し元がリストのコピーを変更して適切なデータを取得できないようにすることはできません。
もっと良い方法はありますか?
core - std::_List_node_base::unhook() 中のコア ダンプ
std::list を使用するプログラムがあります。このプログラムは、std::list に対してプロデューサーおよびコンシューマーとして作用するスレッドを使用します。
メッセージがコンシューマによって処理されると、pop_front() を使用してリストから削除されます。ただし、pop_front 中にコア ダンプが発生します。
gdb トレースは次のとおりです。この問題についての洞察を得るのを手伝ってもらえますか?
c++ - オブジェクトを押し戻し、std::list の以前の場所でそれを消去する
順序はどちらの方法でもかまいません (最初に消去してからプッシュバックします。この方法では、オブジェクトへのローカル参照を作成する必要がないということだけです)。
関数が渡されたオブジェクトと衝突するオブジェクトを見つけた場合、そのオブジェクトをリストの最後に追加し、現在の位置から削除してからオブジェクトを返すという考え方です。消去後すぐに戻るので、イテレータの無効化は問題ではないと思いますか?
このコードにより、プログラムがクラッシュします。
PS cppreference は、消去はオブジェクトを「削除」すると言っていますが、これは単にリストから削除しただけだと思いました。(これが間違っている場合、その場所で要素を削除するにはどうすればよいですか。私が読んでいる削除関数ドキュメントでは、オブジェクトの値を渡すことしかできません)。
編集: クラッシュの場所は常に同じではありませんが、このコードが原因で発生します (つまり、元に戻すと正常に動作します)。可変時間遅延クラッシュの原因は何ですか? 見つかったオブジェクトを破棄したくありません。
編集 オブジェクトをリストの最後に移動すると、衝突する 2 つのゲームオブジェクト間で無限ループが発生するというバグが見つかりました。申し訳ありませんが、投稿されたコードから解読できませんでした。
c++ - std :: listは、ポインタのdeleteを呼び出して削除しますか?
理解できないセグメンテーション違反のため、プログラムでvalgrindを実行しました。ここで問題が検出されました...
除去はこの方法で行われます...
リストからポインタを削除しても、ポインタが必要になるとは思いませんでしdelete
た。ここで何が疑わしいですか?さらに詳しい情報が必要な場合はお知らせください。
PS以前、これをデバッグしたときに、GetTileXとGetTileYが有効なインデックスではなく、13775864のようなばかげた数値を返すために問題が発生したことに気付きました。ただし、これは問題に関連していると思いますdelete
。削除またはpush_backが問題の原因です。
編集:これは別のコードスニペットです
AdjustGridCoordがイテレータを無効にしている可能性がありますか?