問題タブ [ptr-vector]

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.

0 投票する
2 に答える
1074 参照

c++ - ブーストptr_vectorから参照を取得するには?

Object クラスと ObjectManager クラスの 2 つのクラスがあります。ObjectManager クラスは、ptr_vector コンテナーを介して「オブジェクト」を格納します。これらの格納されたポインターへの参照を取得して、個々のアクションを実行する必要がある場合があります。どうすればそうすることができますか?

コンパイル可能な疑似コード:

基本的には、ObjectManager に所有権を保持してもらいたいのですが、他のクラスがオブジェクトへの参照を取得し、何が起こっているかに応じてそのオブジェクトのメソッドを呼び出し、次に進むことができるようにしたいと考えています。

0 投票する
1 に答える
2433 参照

c++ - Ptr_VectorよりもFOR_EACHをブーストしますか?

私は現在、Boostライブラリのいくつかを学ぼうとして楽しんでいます。私は現在、将来の宿題プロジェクトになると思うことをやっています(学期はまだ始まっていません)。ただし、この質問は宿題の問題ではなく、ブーストに関するものです。

コード:

BOOST_FOREACHは、上記とまったく同じコードで通常のベクトルを操作するために使用します。ptr_vectorsを使い始めたので、次のエラーが発生します。

error C2440: '=' : cannot convert from 'Bid' to 'Bid *'

ptr_vectorがforeachメソッドからのポインターをどういうわけか覆い隠していると私を信じさせます。

代わりに書くなら

このタイプのエラーが4つ発生します

error C2819: type 'Bid' does not have an overloaded member 'operator ->'

入札はポインタであることがわかっているので、これは最悪です。

どうすればBOOST_FOREACH適切に反復処理できptr_vectorsますか?

0 投票する
1 に答える
293 参照

c++ - 破棄されていないptr_vectorに格納されている派生クラス

特に、格納されたオブジェクトが他のオブジェクトから継承されている場合に、ptr_vectorを使用してオブジェクトを格納、アクセス、および解放するための最良の方法を見つけようとしていました(ptr_vectorはオブジェクトのスライスに問題がないはずです)。しかし、以下のプログラムを実行すると、驚くべきことに、派生クラスは破棄されません。誰もが理由を知っていますか?

プログラムの出力は次のとおりです。

なぜB0が破壊されないのですか?オブジェクトはスライスされましたか?

0 投票する
2 に答える
653 参照

c++ - ptr_vector イテレータはインクリメントを必要としませんか?

2 番目の for ループは反復子をインクリメントしませんが、反復してすべての要素を消去することに注意してください。私の質問は次のとおりです。

  1. 私の繰り返しのテクニックとイテレータの使用は正しいですか?
  2. for ループで反復子のインクリメントが必要ない場合、インクリメントはどこで発生しますか?
  3. イテレータを使用する方が良いですか、それとも通常の整数で十分ですか (つまり、イテレータを使用して付加価値はありますか)? (pv.erase(pv.begin()+5); のように 5 番目の要素を消去することもできます)
  4. 新しいオブジェクトを ptr_vector の特定の位置 (5 番目の位置としましょう) に直接割り当てる方法はありますか? pv[5]=new Derived(5); のようなものを探しています。それを行う方法はありますか?
0 投票する
1 に答える
4426 参照

c++ - boost::shared_ptr セマンティクス (コピー)

私は、以下のコードが正しいという新鮮な目を持ちたいと思っていました:

オブジェクト trifoo (ptr_vector に格納されている) に含まれるポインターは、共有ポインター f、g、h です。

また、trifoo; のコンストラクターでの shared_ptr コピーの結果はどうなりますか? これはshared_ptrを「共有」する正しい方法ですか、参照カウントが確実に増加するなどです。他のすべての疑問はテストして確認できましたが、これを(適切に)確認する方法がわかりません。批評も大歓迎です。

注: 無意味なループは、メモリ リークをテストするためのもので、メモリ リークは発生しませんでした。

0 投票する
1 に答える
529 参照

c++ - boost::ptr_vector のポインタを自分で消去する必要がありますか?

このコードがリークするかどうか疑問に思っていました:

int main()
{
boost::ptr_vector <char> v;
v.push_back(new char[10]);
v.clear()
}

ptr_vector デストラクタまたは clear() 関数は、含まれているポインタを削除しますか、それとも自分で行う必要がありますか?

0 投票する
1 に答える
739 参照

c++ - boost::ptr_vector で派生オブジェクトにアクセスする

クラス B のオブジェクトを格納するためにも使用する boost::ptr_vector < class A > を使用しています: public class A. ベクトル内のクラス B オブジェクトにアクセスできるようにしたいです。キャストしてアクセスするにはどうすればよいですか?

0 投票する
1 に答える
377 参照

c++ - C++ブースト::ptr_containerで要素を共有していますか?

次のコードを検討してください。

copy要素を に入れたくはありませんが、提供vec1する方法で共有しshared_ptr<>ます。私の要件は基本的に次のとおりです。

  • コンテナの一部であるオブジェクトの範囲の同じインスタンスを別のコンテナ インスタンスで共有する
  • これら 2 つ以上のコンテナーで 1 つのインスタンスを共有したくない
  • 1 つの要素が他のコンテナーから「突然」消去されたときに通知を受け取りたい (または、少なくともこれを確認してください。たとえば、 のようなものですshared_ptr::unique()) 。

両方のコンテナーは同じクラスの一部です。したがって、それらは同じスコープを持ち、同時に破棄されます。これらのクラスのコンストラクターは、両方のコンテナーを構築します。建設後、これらのコンテナに変更はありません。

std::vector<>代わりにofを使用する必要shared_ptr<>がありますか、それとも他の解決策はありますか?

0 投票する
2 に答える
134 参照

c++ - エラー: 'Config::testMap' の使用が無効です

コードは次のとおりです。

私はマップを初めて使用します。これまでマップを使用したことがありません。それらをオンラインで使用する方法の例をたくさん見つけました。残念ながら、それらのより高度な例を理解できないようです。

私がやりたいのは、キー ( std::string) と値 ( boost::ptr_vector<struct>) を持つマップを作成することです。

宣言して正常に渡すことから始めようとしていました。次に、それを埋める方法を試してみたいと思いました。

あいまいなエラーに遭遇しましたが、それを解釈する方法がわかりません。

の「使用」で私が間違ったことについて何か提案はありtestMapますか?

また、誰かがマップを作成する方法の簡単な例を提供できますか?

のキーaと の値が必要だとしますstr1 = "hello", var1 = 10。どうすればいいですか?

フォローアップの質問: Kerrek SB が下に残した回答に関して。

私が次のことをすると...

次のエラーが表示されます。

代わりに.insert()メソッドを実行すると、次のエラーが発生します。

ファローアップ:

私が調べたところ、これは不可能です。

ptr_vectorマップでは a を使用できません。(だから私は言われました)所有権/コピーの問題が原因ですか?

「マップ内で発生するはずの ptr_vector をコピーしようとするとどうなりますか? ポインター コンテナーは、ポインターの排他的所有権をモデル化します。

C++0x と std::move でこれを行うことができますが、ここでは役に立ちません。」

誰でも反例を提供できますか?

0 投票する
1 に答える
324 参照

c++ - メンバー boost::ptr_vector<> の追加

私は落ち込んでいるクラスを持っています:

CpuCore オブジェクトを cpuCores ベクターに追加するには、ポインターを追加する必要がありますか? または、通常は次のように値をコピーできます。

CpuCore *_newVal パラメーターを使用すると、次のエラーが発生します:
../src/usage/CpuUsage.h:42: エラー: 'boost::ptr_vector > CpuUsage::cpuCores' is private ../src/NodeInfoGather.cpp: 73: エラー: このコンテキスト内

ここでベクトルがプライベートであるという問題は何ですか?

ありがとう、