3

私は答えを探しましたが、まだこれを理解できません。

申し訳ありませんが、私の作業は複雑すぎてここにサンプル コードをコピーできません。

パラメータとしてポインタを取得する関数があります。私はそれを使用しますが、後で、古い先のとがったオブジェクトを使用したい場合に、一種のコールバックが必要になります。

問題は、このコールバックが呼び出されたときに、ポインターが既に削除または解放されていることです。私の考えは、ポイントされたオブジェクトのコピーをヒープに作成し、コールバックが終了したら解放することでした。しかし、ポインター、コピー コンストラクター、その他のものの間で迷子になりました。解決策はおそらく非常に簡単ですが、私は立ち往生しています。

4

4 に答える 4

5

がある場合はT * p、次のように新しいオブジェクトを作成できます。

T x(*p);

または、もしそうしなければならないのであれば (しかし、真剣にそうすべきではありません!)、動的に割り当てられたオブジェクト:

T * q = new T(*p);

2 番目の形式は使用しないでください。あなたがそれで招いている頭痛に終わりはありません。

于 2012-11-02T17:58:36.930 に答える
2

typeTがあり、ポインターが現在有効なポインターであるT* ptr; と仮定すると、T でコピー コンストラクターを呼び出して、ヒープ上に新しいポインターを作成する必要があります。さて、これには、型に正しく記述されたコピー コンストラクターとデストラクターなどが必要です。ptrT* ptr2 = new T(*ptr);T

于 2012-11-02T17:59:42.007 に答える
0

私はちょうどこれを見つけました: C++ Idioms/Virtual Constructor

于 2012-11-05T14:14:05.440 に答える