良い C++ スタイルについて質問があります。メンバとして 1 つまたはいくつかのポインタを持つクラス "MyClass" を書きたいのですが、MyClass はこのポインタにメモリを割り当てることができます。暗黙的な Give default-copy-constructor (および default-assignment-operator) を使用して MyClass のインスタンスをコピーし、ポインターのみがコピーされ、新しいオブジェクトが初期オブジェクトが持つデータを共有するようにしたいと考えています。割り当てられます。
私の考えは、コピーされたオブジェクト (コピー コンストラクターまたは代入演算子で作成されたもの) がメモリを解放する (およびメンバー ポインターにメモリを割り当てる) ことを禁止することでした。コピーされたオブジェクトと元のオブジェクト (コンストラクターによって作成された) を区別するために、次のコードを使用します。
class MyClass
{
public:
MyClass(): originalPtr(this) { data = new char[100000]; }
~MyClass() { if(originalPtr == this) delete[] data; }
private:
MyClass *originalPtr;
char *data; // shared data (not copiable)
char otherFeatures[10]; // individual data (copiable)
};
このソリューション ( this
-pointer との比較を使用) は、そのような目的 (たとえば、値による呼び出しによるオブジェクトの解析) に適したスタイルでしょうか?それともリスクがありますか? もちろん、元のオブジェクトはコピーされたオブジェクトよりも常に長生きすると思います。
ありがとうございました!