問題タブ [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.

0 投票する
4 に答える
22380 参照

c++ - make_sharedと同等のもので配列を割り当てることができますか?

を使用してアレイにメモリを割り当てることはできますmake_shared<>()か?

私はそれをできた:buffer = std::make_shared<char>( new char[64] );

しかし、それでも新しいものを呼び出す必要があります。私の理解make_sharedでは、より安全で効率的です。

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

c++ - std::make_shared() はカスタム アロケータを使用しますか?

このコードを検討してください:

その出力は次のとおりです。

明らかにstd::make_shared()、オペレーターを呼び出していませんnew。カスタム アロケーターを使用しています。これは の標準的な動作std::make_shared()ですか?

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

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 を直接呼び出すことができるようにします。

0 投票する
0 に答える
1971 参照

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 バージョンほど良くないのはなぜですか? 誰かが同様のテストをしましたか?私のテストに何か問題がありますか、それとも私が考慮しなかったことがありますか?

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

c++ - Pythonで作成されたオブジェクトをC ++で割り当てる方法は?

基本的に、修正しようとしている非常に単純なノード テスト ケースがあります。

getChild と getParent を持つ単純な Node クラスがあります

子は addChild 関数を介して割り当てることができます

次に、この関数は関連するクラスに親を自動的に設定します(したがって、C ++側から)

残念ながら、それを行うと、python参照が失われます..

コードは理解しやすいはずです:

基本的なメイン クラス MyNode :

次に、ブースト python バインディング コード:

私のpythonテストコードを完了するには:

問題は確かに addFunction と、boost::make_shared を使用して親を設定する方法にあります。残念ながら、何が起こっているのかわかりません..ブーストラッパーを使用しようとしました:

しかし、まだ addChild 関数をどのように変更すればよいかわかりません

何か案が ?

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

c++ - make_shared デフォルト以外のメモリ管理を使用する方法

規格について質問です..

では、メモリ割り当てを管理するプールがあるとしましょう..

私はshared_ptrを使いたくて、APIをチェックアウトしました..

予想通り、shared_ptr の場合、ポインターの割り当てを制御し、割り当て解除関数を与えることができることがわかりました。

今、私は STL の講義を見てきましたが、maked_shared の方がメモリ効率が高いことがわかりました (制御ブロックと ptr を同じ場所に割り当てることができるため)。新規/削除のみを使用するには..質問は次のとおりです。

  1. 私は正しいですか?新規/削除のみ?
  2. もしそうなら、なぜですか?

ありがとう!

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

c++ - shared_ptr の作成中に問題が発生しました

私はスマート ポインターは初めてで、すべてのつまずきにぶつかっている最中です。

私は構造体を持っていますtexture_t:

shared_ptrこの行を使用してこの構造体を作成しようとすると:

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

このエラーはどこから来て、どうすれば回避できますか?

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

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 サイトでは、この問題を明らかにしていません。どんな助けでも大歓迎です。