問題タブ [make-shared]
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++ - make_sharedと同等のもので配列を割り当てることができますか?
を使用してアレイにメモリを割り当てることはできますmake_shared<>()
か?
私はそれをできた:buffer = std::make_shared<char>( new char[64] );
しかし、それでも新しいものを呼び出す必要があります。私の理解make_shared
では、より安全で効率的です。
c++ - std::make_shared() はカスタム アロケータを使用しますか?
このコードを検討してください:
その出力は次のとおりです。
明らかにstd::make_shared()
、オペレーターを呼び出していませんnew
。カスタム アロケーターを使用しています。これは の標準的な動作std::make_shared()
ですか?
c++ - C++ クラス テンプレートの初期化子リスト コンストラクターを提供する
テンプレート パラメーター T を持つクラス テンプレート Templ があり、Templ クラスには obj と呼ばれる型 T のデータ メンバーがあります。引数を obj のコンストラクターに転送する可変引数コンストラクター テンプレートを作成しました。
ここで、型 T が init-list コンストラクターを持つクラスである可能性があることに気付きました。Templ を介してアクセスできるようにしたいと考えています。std::list::emplace
だから私は何をチェックstd::make_shared
しました。私のような可変関数がありますが、init-list を取るオーバーライドはありません。何らかの理由で。
最初の質問:なぜですか?std::list<T>
つまり、init-list ctor でクラス T を使用し、次に?を使用するとどうなるでしょうか。list::emplace に initializer_list を取るバージョンがないのはなぜですか? たぶん、私がそうすべき正当な理由があるのかもしれません...だから私は知りたいです。
また、STL の機能に関係なく、init-list ctor を適切な設計として提供する必要がありますか? つまり、可変引数 ctor のようなものですよね?ユーザーが任意の型またはクラス T を選択して Templ<> で使用できるようにし、T に定義された任意の ctor を直接呼び出すことができるようにします。
boost - intrusive_ptr、shared_ptr パフォーマンス テスト
リリース モードに vs2010 を使用した場合、以下の結果が得られました。
1000000 の intrusive_ptr を生成するのにかかる時間は 116 1000000 の shared_ptr を生成するのにかかる時間は 175 120
intrusive_ptr が最速のようですが、MS も make_shared 関数を使用して shared_ptr でうまくやっているようです。しかし、ブースト make_shared のパフォーマンスが MS バージョンほど良くないのはなぜですか? 誰かが同様のテストをしましたか?私のテストに何か問題がありますか、それとも私が考慮しなかったことがありますか?
c++ - Pythonで作成されたオブジェクトをC ++で割り当てる方法は?
基本的に、修正しようとしている非常に単純なノード テスト ケースがあります。
getChild と getParent を持つ単純な Node クラスがあります
子は addChild 関数を介して割り当てることができます
次に、この関数は関連するクラスに親を自動的に設定します(したがって、C ++側から)
残念ながら、それを行うと、python参照が失われます..
コードは理解しやすいはずです:
基本的なメイン クラス MyNode :
次に、ブースト python バインディング コード:
私のpythonテストコードを完了するには:
問題は確かに addFunction と、boost::make_shared を使用して親を設定する方法にあります。残念ながら、何が起こっているのかわかりません..ブーストラッパーを使用しようとしました:
しかし、まだ addChild 関数をどのように変更すればよいかわかりません
何か案が ?
c++ - make_shared デフォルト以外のメモリ管理を使用する方法
規格について質問です..
では、メモリ割り当てを管理するプールがあるとしましょう..
私はshared_ptrを使いたくて、APIをチェックアウトしました..
予想通り、shared_ptr の場合、ポインターの割り当てを制御し、割り当て解除関数を与えることができることがわかりました。
今、私は STL の講義を見てきましたが、maked_shared の方がメモリ効率が高いことがわかりました (制御ブロックと ptr を同じ場所に割り当てることができるため)。新規/削除のみを使用するには..質問は次のとおりです。
- 私は正しいですか?新規/削除のみ?
- もしそうなら、なぜですか?
ありがとう!
c++ - shared_ptr の作成中に問題が発生しました
私はスマート ポインターは初めてで、すべてのつまずきにぶつかっている最中です。
私は構造体を持っていますtexture_t
:
shared_ptr
この行を使用してこの構造体を作成しようとすると:
次のエラーが表示されます。
このエラーはどこから来て、どうすれば回避できますか?
c++ - エラー: オーバーロードされた関数 "std::make_shared" のインスタンスが引数リストと一致しません
std:make_shared と std::shared_ptrの以前のスタックの質問を見て、これを uni プロジェクトに実装しようとしました。これは以前の「質問」でした:
どんなシチュエーションも思い浮かばない
std::shared_ptr<Object> obj(new Object("foo", 1));
することが好ましいだろう
auto obj = std::make_shared<Object>("foo", 1);
したがって、私はこのコードを取りました:
そして、このコードに変更しました:
ただし、std::make_shared には赤の下線が引かれています。マウスオーバーすると、「エラー: オーバーロードされた関数 "std::make_shared" のインスタンスが引数リストと一致しません」というエラーが表示されます。
私のコードはコードの 1 行目で正しくコンパイルおよび実行されますが、2 行目を使用するとエラーが発生します。
これらのエラーは次のとおりです。
`1>------ ビルド開始: プロジェクト: SIT153Canvas、構成: Win32 のデバッグ ------ 1> main.cpp
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && ,_V3_t &&,_V4_t &&)' : 5 つの引数が必要です - 10 個が提供されます
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && ,_V3_t &&)' : 4 つの引数が必要です - 10 個が提供されます
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && )' : 3 つの引数が必要です - 10 個が提供されます
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&)' : 2 つの引数が必要です - 10 個が提供されます
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&)' : 1 つの引数が必要です- 10個提供
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): エラー C2780: 'std::shared_ptr<_Ty> std::make_shared(void)': 0 引数が必要です - 10個提供
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 'std::make_shared' の宣言を参照してください
エラーによると、std::make_shared は最大 5 つの引数しか期待していないようです。残念ながら、私が検索した他の Web サイトでは、この問題を明らかにしていません。どんな助けでも大歓迎です。