想像してみてください、私はいくつかのクラスを持っています:
class MyClass{
public:
MyClass(unsigned int N): a(new double[N]){};
~MyClass(){delete[] a;};
private:
double* a;
}
別のクラスでは、このクラスへのポインターを使用します。
class MyOtherClass{
public:
MyOtherClass(unsigned int N):p(new MyClass(N)){};
~MyOtherClass(){delete p;};
MyClass* get_MyClass(){return p;};
private:
MyClass *p;
}
次に、主に MyOtherClass に含まれる MyClass を取得する必要があります
int main(){
MyOtherClass moc(1e100);
MyClass mc;
mc <-> moc.get_MyClass();
}
<->
私が立ち往生しているところです。mc
それが p が指すものになりたいのですが、(巨大な)静的配列をコピーする必要はありません。この変換を効率的に行う方法はありますか?
編集
あなたの答えに感謝しますが、私は何かを正確にします。MyClass のコピーの時間のかかる部分は静的配列のコピーに由来するため、次のようなことができると思いました。
class MyClass{
public:
MyClass(unsigned int N): a(new double[N]),del(true){};
MyClass(MyClass* mc): a(mc.get_a()),del(true){};
~MyClass(){if(del){delete[] a;}};
double* get_a(){
del = false;
return a;
}
private:
double* a;
bool del;
}
メインで:
int main(){
MyOtherClass moc(1e100);
MyClass mc(moc.get_MyClass());
}
しかし、メモリリークがあるかどうかはわかりません...