在不使用 std::copy 函数的情况下编写这个复杂的复制结构体
Writing this complicated copy costructor without using std::copy function
请解释如何在不使用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?
}
正如你所看到的,我严重陷入了某种递归的东西中。 :(
复制构造函数的语义应该是创建一个新的相同对象,该对象不与原始对象共享任何资源。实现应该是这样的:
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的其余部分。
相关文章:
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 包含 std::list 的结构体的 C++ 初始化
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何使用结构体的向量数组?
- 如何使用结构体在C++中更改这些代码?
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 我应该如何在C++中使用结构体解决输入失败的问题?
- Qsort() 比较结构体整数的总和
- 如何使用迭代器指向结构体c++的向量
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 如何获取结构体成员的地址
- 创建结构体向量,表达式:向量下标超出范围
- boost::任何带有结构体和无符号整数
- 如何在构造函数中初始化结构体的动态数组?
- 只写结构体的某些字段
- C++ push_back() 一个结构体到一个向量中
- C++14 结构体上的统一初始化
- 在不使用 std::copy 函数的情况下编写这个复杂的复制结构体