想象一下,我有一些课:
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());
}
但我不知道我是否会有内存泄漏...