请解释如何在不使用std::copy
函数的情况下为此类编写复制构造函数。
class A {
public:
struct B {
int aaprikhat;
B* bajja;
}
A() : x(0) {}
A(const A&)
private:
B* bajookha;
}
这是我的尝试:
A::A(const A& a) {
this->bajookha = new B();
this->bajookha->aaprikhat = a.bajookha->aaprikhat;
this->bajookha->bajja = a.bajookha->bajja; // I think this is wrong
//I even tried doing this:
//this->bajookha->bajja = new B();
// But how to copy data from a.bajookha->bajja to this->bajookha->bajja?
}
正如你所看到的,我严重陷入了各种各样的递归之中。 :(
答案 0 :(得分:0)
复制构造函数的语义应该是创建一个新的相同对象,该对象不与原始资源共享任何资源。实施应该是这样的:
class A {
public:
struct B {
int aaprikhat;
B* bajja;
B() : aaprikhat(0), bajja(nullptr) {}
B(B& obj) : aaprikhat(obj.aaprikhat) {
if (obj.bajja != nullptr)
bajja = new B(*obj.bajja);
else
bajja = nullptr;
}
};
A() : x(0), bajookha(nullptr) {}
A(const A& obj) : x(obj.x) {
if (obj.bajookha != nullptr)
bajookha = new B(*obj.bajookha);
else
bajookha = nullptr;
}
private:
B* bajookha;
int x;
};
我想这是学习c ++拷贝构造函数的一种练习。这个例子解决了你的问题,但它是低级代码,如果标准库中有一些可能解决你问题的东西,你应该特别避免它。
PD:您还应该实现一个复制赋值运算符。感谢余下的Matt McNabb。