問題タブ [auto-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++ - 参照と auto_ptr
auto_ptr がある場合は、参照用に渡すことができますか?のように:
また、auto_ptrs の奇妙なコピー動作とは何ですか?
c++ - boost::ptr_vector および boost::any に関する問題
わかりましたので、疑問があります。これが可能かどうか知りたいです。
一般的なデータ(文字列、整数、ブール値など)を含むデータベースを使用しています。オブジェクトが構築されるか、オブジェクトのメンバーが変更されるたびに、特定のアクション (SELECT または UPDATE) を使用してデータベースにクエリを実行する必要があります。まず第一に、これは DB 関連の質問ではありません。私の本当の問題は、オブジェクトのメンバーへの boost::any のポインタを保持する ptr_vector があることです。次のようなコードで:
次に、変更したいメンバーを、引数として boost::any* を取る別のその他のクラスの関数に渡します。
その同じクラスは any* を受け入れ、次のことを行います。
Enemy_Values は ptr_vector です。したがって、Enemy_Values をメンバーとして持つこの misc_class にアクセスするとき、内部の auto_ptr が指している値を変更したいと考えています。
ここで、違反エラーが発生します。私は多くのことを試しましたが、auto_ptr のコンテナーを使用したり、boost::any で前後に変換したりするべきではないと誰かに言われました。これは可能ですか、それとももっと直感的な方法がありますか?
前もって感謝します。
c++ - 別の値とともに新しいオブジェクトを返す
2 つの値を返したいのですが、そのうちの 1 つは新しいオブジェクトです。私はこれを使用してこれを行うことができますstd::pair
:
コードを例外セーフにするために、次のことを行います。
auto_ptr
ただし、コピーされるものを変更せずにコピーすることはできないため、これはコンパイルされませんauto_ptr
。わかりました、これはauto_ptr
他のタイプのようにうまく構成できないことを意味します (もう 1 つの点で)。この場合、新しいオブジェクトを返す良い方法は何ですか?
1 つの選択肢は a を返すことでshared_ptr
あり、もう 1 つは inout 参照です。しかし、私は他の代替手段を探しています。私は次のようなことができます:
より良い方法はありますか?
c++ - コンストラクトをコピーする必要があるクラスで std::auto_ptr を使用するにはどうすればよいですか?
foo
コンストラクトをコピーしたい std::auto_ptr メンバーを含むクラスがありますが、これは許可されていないようです。課題についても同様のことがあります。次の例を参照してください。
_c
asと宣言することもできますmutable
が、これが正しいかどうかはわかりません。誰かがより良い解決策を持っていますか?
編集
OK、期待していたような回答が得られないので、問題についてもう少し具体的に説明します。
- タイプのオブジェクトが
foo
スタック上に作成され、値によってコンテナー クラス (stl ではない) に渡された後、スコープ外になります。コンテナー コードを制御することはできません。(実際には、バグのあるアクティブ キューの実装です。) - この
bar
クラスは、かなり重量のあるパーサーです。パフォーマンスが非常に低いnew
ためdelete
、コピー構築可能であったとしても、コストがかかりすぎます。 bar
オブジェクトが作成されると、一度に 1 か所だけ所有する必要があることを保証できます。この場合、スレッド間で渡され、トランザクションが完了すると削除されます。これが、私が a を使用することを望んでいた理由ですstd::autp_ptr
。- ブースト スマート ポインターを検討したいと思っていますが、代替手段があれば、この一意性を保証したいと考えていました。
c++ - このコードが 42 しか出力しないのはなぜですか?
このコードが「created\n42」ではなく「42」のみを出力する理由を誰か説明してもらえますか?
ところで、ソリューションでさまざまな値を使用してこのコードを試してみましたが、常に「正しい」値が得られるため、ランダムなラッキー値ではないようです。
c++ - std::auto_ptr、delete[]、およびリーク
このコードでメモリ リークが発生しないのはなぜですか?
WinXP sp2、コンパイラ: BCB.05.03
c++ - 関数から複数の auto_ptrs を返す
ヒープに 2 つの変数を割り当てて呼び出し元に返す関数があります。このようなもの:
通常、同様のケースで、1 つの変数を持つ関数がある場合、次の「ソース」トリックを使用しますauto_ptr
。
Create1
を使用して書き直したいのですauto_ptr
が、その方法がわかりません。私が理解している限り、参照によって auto_ptr を返すことはできません。それで、それはまったく可能ですか?
c++ - boost::shared_ptrの代わりにstd::auto_ptrを使用するのはいつですか?
すべてのコードでの使用にほぼ移行しましたが、シングルトンクラスなど、boost::shared_ptr
使用するいくつかの孤立したケースがまだあります。std::auto_ptr
これが行われなかったのには非常に正当な理由があると言われましたがshared_ptr
、私の人生ではその理由がわかりません。それauto_ptr
は最終的に次の標準で減価償却としてマークされることを知っているので、この実装をどのように/どのように置き換えることができるかを知りたいです。
auto_ptr
また、?の代わりに使用することを検討する理由は他にありshared_ptr
ますか?また、将来、shared_ptrに移行する際に問題が発生することはありますか?
編集:
- したがって、「上記のコードで安全に置き換えることができますか」という答えでは、答えは「はい」です。ただし、パフォーマンスにわずかな影響を与えます
auto_ptr
。shared_ptr
auto_ptr
最終的に減価償却としてマークされ、に移動したらstd::shared_ptr
、コードを徹底的にテストして、さまざまな所有権のセマンティクスに準拠していることを確認する必要があります。
c++ - 別のメンバー変数を処理するメンバー変数として auto_ptr を使用するにはどうすればよいですか
私はこのようなクラスを持っています:
しかし、B ptr は異なる A オブジェクト間で共有されます。同じptrを指す他のAオブジェクトが問題なく続行できるように、Aが破壊されたときにBがオンのままになるようにauto_ptrを使用するにはどうすればよいですか。これは大丈夫ですか:
人々がこれを実装したさまざまな方法と、彼らが互いに見た問題/利点は何ですか...ありがとう
c++ - 複数のコンテナに保存されているC++オブジェクトを効果的に削除するにはどうすればよいですか?auto_ptr?
実行中に特定の種類のオブジェクト(たとえば、「Foo」クラス)を作成して、いくつかの統計を追跡し、それらを2つのSTLマップの一方または両方に挿入するアプリケーションがあります。
Fooオブジェクトを削除する最良の方法は何だろうと思っていました。現時点での私の解決策は、map1とmap2を繰り返し処理し、Fooポインターをセットに入れてから、このセットを操作して、それぞれでdeleteを呼び出すことです。
auto_ptrを使用するなど、より効果的な方法はありますか?もしそうなら、auto_ptr <>オブジェクトはSTLコンテナに保存できないので?
前もって感謝します。