問題タブ [unique-ptr]
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++ - C ++:不明な削除機能を持つunique_ptr
一部のデータを取得して処理する関数を作成する必要があります。このデータは、いくつかの方法で割り当てることができます(データセグメント、ヒープ、共有メモリセグメントなど)。
動的に割り当てられる可能性があるので、それを処理する最良の方法は、または他の種類のスマートポインタdata
を使用することだと思います。unique_ptr
ただし、常に動的に割り当てられるわけではありません。実行時にの削除機能を選択する必要がありますunique_ptr
が、それは不可能です。
どのように定義して処理する必要がありますdata
か?
c++ - C++11従来のポインターをスマートポインターに変換します。llvmの最新のSVNClangとlibc++を使用する
クラス(A)内に、基本的に別のクラス(B)へのポインターをパラメーターとして受け取る関数があります。Bクラスは、他の複数のクラスにも継承され、それらも受け入れる必要があります。
私がやりたいのは、このポインタの所有権を取得して、後でクラスで使用するために保存することです。このポインタは、他の目的でクラスの外部で再び使用されることはありません。パラメータをshared_ptrにしますが、一緒に作業している他の人がスマートポインタのすべてを完全に理解していないため、これはできるだけ避けたいと思います。これを行う方法はありますか?
これが私がやりたいと思う一種の例ですが、私がテストしたことからはこれは機能しません。
次に、コピーコンストラクターなどを使用して、クラス内でスマートポインターを使用したいと思います。手動で削除する必要がある場合は、やらなければならないことが少し醜くなる可能性があります。それに関する問題は、それが入ってくる基本クラス(B)なのか、それともBから継承したクラスなのかわからないということです。クラスのチェック可能なIDの一種であり、正しいコピー/移動コンストラクターを使用します。これは絶対に避けたいと思います。
2012年3月12日の英国時間午前10時頃に更新したllvmから更新されたClangとlibC++を使用しています。
c++ - unique_ptrを関数に渡す
私はいくつかの既存のコードを「近代化」しようとしています。
- 現在、メンバー変数「Device*device_」を持つクラスがあります。
- newを使用して初期化コードでインスタンスを作成し、破棄に「deletedevice_」があります。
- このクラスのメンバー関数は、Device*をパラメーターとして受け取る他の多くの関数を呼び出します。
これはうまく機能しますが、コードを「最新化」するには、として定義される変数を変更し、"std::unique_ptr<Device> device_"
deleteの明示的な呼び出しを削除する必要があると考えました。これにより、コードがより安全になり、一般的に優れたものになります。
私の質問はこれです-
- 次に、 device _変数をパラメーターとして必要とするすべての関数に渡すにはどうすればよいですか?
.getを呼び出して、各関数呼び出しで生のポインターを取得できます。しかし、それは醜いようで、そもそもunique_ptrを使用する理由のいくつかを無駄にします。
または、すべての関数を変更して、「Device *」タイプのパラメーターを取得する代わりに、「std :: unique_ptr&」タイプのパラメーターを取得するようにすることもできます。これは(私にとって)関数プロトタイプをやや曖昧にし、読みにくくします。
このためのベストプラクティスは何ですか?他のオプションを逃したことがありますか?
c++ - unique_ptrコンパイルエラー
これをコンパイルできないと言ったら、これは恥ずかしいことだと思います。助けてくれませんか:
c++ - Eclipseでのunique_ptrオートコンプリート
unique_ptr で遊んでいます。前回の投稿では、コンパイル時に -std=c++0x を指定することで、このポインターを使用するプログラムをコンパイルするのを手伝ってくれました。今、オートコンプリート中にc ++ 11を考慮するようにEclipseに指示する方法があるかどうか疑問に思っていましたか?
unique_ptr が std:: 名前空間のリストに含まれていないか、unique_ptr に関連付けられているメソッド (リセット、移動...) が見つかりません。
ありがとうございます
c++ - std::unique_ptr を使用した double (2 次元) 配列
ポインターからポインターへのポインターによって割り当てられた double 配列があります。
私はこれを使用してこれをやろうとしていますunique_ptr
:
しかし、それを言ってエラーが発生し続けましたno operator = matches these operands
。ここで何が間違っていますか?
c++ - unique_ptrをコピーできるのはなぜですか?
重複の可能性:
関数からunique_ptrを返す
20.7.1.2 [unique.ptr.single]は、次のようなコピーコンストラクターを定義します。
では、なぜ次のコードが正常にコンパイルされるのでしょうか。
私はそれをこのようにコンパイルしました:
コンパイラ:g++バージョン4.6.110110908(Red Hat 4.6.1-9)
c++ - std :: unique_ptr with custom deleter for win32 LocalFree
私はwin32APIを持っていますCommandLineToArgvW
。これは、を返し、LPWSTR*
警告します。
CommandLineToArgvW
引数文字列へのポインタと引数文字列自体に連続したメモリのブロックを割り当てます。呼び出し元のアプリケーションは、引数リストが不要になったときに、引数リストで使用されていたメモリを解放する必要があります。メモリを解放するには、LocalFree
関数を1回呼び出します。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb776391(v=vs.85).aspxを参照して ください
上記の場合にメモリを解放するC++の慣用的な方法は何ですか?
私はstd::unique_ptr
カスタムデリッターを使って考えていました、そのようなもの:
上記のコードに問題はありますか?
c++ - 型が不完全なstd::unique_ptrはコンパイルされません
私はpimpl-idiomを使用していstd::unique_ptr
ます:
ただし、不完全な型の使用に関するコンパイルエラーが発生します。304行目<memory>
:
sizeof
不完全な型への''の無効な適用'uixx::window::window_impl
'
私の知る限りstd::unique_ptr
、不完全なタイプで使用できるはずです。これはlibc++のバグですか、それともここで何か間違ったことをしていますか?
c++ - std::bind は一般的に移動のみの型、特に std::unique_ptr で動作しますか?
私はboost::asioを使おうとしていますが、ちょっとした泥沼に陥っています。
次のコードをコンパイルしようとしています。
もちろん、handle_read_done の署名と std::bind で渡された引数の両方から std::move(buffer) を除外すると、すべて正常に動作します。
それをboost::asio::async_read_someに渡そうとすると、std::bindから返されたオブジェクトの暗黙的に削除された関数、タプルの削除された関数について不平を言います。特定のエラー。呼び出しをブーストする署名と一致する必要がある std::function に割り当てようとすると、同じタプルエラーが発生するため、それらは同じものだと思います。std::bind の結果を auto に代入するだけではコンパイラ エラーは発生しませんが、もちろん何も呼び出すことはできません。
私は何を間違っていますか?以下は、に割り当てようとしたときの出力ですstd::function<void(const boost::system::error_code&,size_t)>
アップデート:
上記が機能しないように見えることを理解しています。しかし、それでは、次のように動作するべきではありませんか?
の署名がhandle_read_done
ある場所
非常に明白な何かが欠けているように感じます。
エラーメッセージ: