我翻遍了 SO 并学到了很多关于默认构造函数、复制构造函数、对象分配、智能指针、浅/深复制以及它们与动态内存分配的关系(例如This、This、That和 ...)。但是,对于最佳实践是处理复制对象元素(例如向量(或列表))的结论,我仍然很模糊。
我特别学习了 STL 向量,它通过其默认的复制构造函数来处理这个问题,在这种情况下,最好的做法是不要自己管理资源。但似乎我理解错了。
问之前我的努力:我也能够通过引用传递对象来解决这个问题,但我最终拥有太多的尊重运算符(即**)。
对于简单的小对象(例如以下代码中的对象),这里的最佳做法是什么?向量中的元素未正确复制。(如果我在这里犯了非常简单的错误,我不会感到惊讶。此外,如果可能,最好不要使用原始/共享/智能指针)。
#include <iostream>
#include <vector>
using namespace std;
class A{
public:
int id;
A(int id_):id(id_){}
vector<A> childs;
};
int main()
{
A a0(0), a1(1);
a0.childs={a1}; //node0.childs.push_back(node1);
a1.childs={a0}; //node1.childs.push_back(node0);
cout << a0.childs.size() << endl; // 1
cout << a1.childs.size() << endl; // 1
cout << a0.childs[0].childs.size() << endl; // expecting 1 but 0
//Probably since they're not pointing to the same address of memory
//I was hoping vector handle this by itself (was told best practice in this case is to not manage resources yourself)
return 0;
}