我正在尝试复制数组。
class Myobject
{
int nb;
string name;
Myobject* next;
Myobject(int nb, string name) {this->name=name; this->nb=nb; this->next=NULL;}
};
Myobject **array;
array= new Myobject*[100];
如何制作Myobject **的深层副本,从而能够修改其中一个实例。
答案 0 :(得分:0)
您可以添加此(深层)-copy构造函数:
Myobject(const Myobject& rhs) :
nb(rhs.nb),
name(rhs.name),
next(rhs.next == NULL ? NULL : new Myobject(*rhs.next))
{}
您可能需要添加正确的destrutor以避免内存泄漏...
如果可能,我建议使用std::list<Myobject>
代替
答案 1 :(得分:0)
分配要复制的数组和循环。
NewMyobject **newarray = new Myobject*[100];
for (int i = 0 ; i < 100; ++i)
newarray[i] = new MyObject(array[i]);
对象必须具有复制构造函数。
答案 2 :(得分:0)
如果您想了解最新信息,请使用RAII,其中C ++非常适合。
#include <vector>
#include <memory>
#include <string>
#include <iostream>
struct Myobject : std::enable_shared_from_this< Myobject >
{
int nb;
std::string name;
std::shared_ptr<Myobject> next;
Myobject(int nb, std::string name) { this->name=name; this->nb=nb; }
~Myobject() { std::cout << "deleting " << nb << " " << name << std::endl; }
};
int main() {
std::vector< std::shared_ptr< Myobject > > arr;
arr.push_back(std::make_shared< Myobject >(1,"first"));
arr.push_back(std::make_shared< Myobject >(2,"second"));
for (auto obj: arr) {
std::cout << obj->nb << " " << obj->name << std::endl;
}
arr[0]->next = arr[1];
};
1 first
2 second
deleting 1 first
deleting 2 second
并且您最初不需要太在意内存管理。没有经过适当注意的例子会产生内存泄漏。
更新:忘记提及,如果您有循环引用,请注意,您也可能使用shared_ptr
来获取内存泄漏。如果是这种情况,您可以通过切换到weak_ptr
s→std::weak_ptr