C++ C++;(逻辑复制构造函数)如何复制对象?
我有一门课:C++ C++;(逻辑复制构造函数)如何复制对象?,c++,pointers,object,copy-constructor,C++,Pointers,Object,Copy Constructor,我有一门课: class Person{ public: Person(); ~Person(); string name; int* age; }; int main() { Person* personOne = new Person; personOne->name = "Foo"; personOne->age = new int(10); return 0; } 如何创建Person的另一个对象来复制所
class Person{
public:
Person();
~Person();
string name;
int* age;
};
int main()
{
Person* personOne = new Person;
personOne->name = "Foo";
personOne->age = new int(10);
return 0;
}
如何创建Person的另一个对象来复制所有personOne数据?年龄指针需要指向一个新的int,这样每当personOne或personTwo中的年龄发生变化时,它都不会相互影响。有两种可能性:
- 复制构造函数+赋值运算符
方法克隆
- 您真的需要
指针吗int
- 你知道智能指针吗
- 是否释放分配的所有内存
- 是否初始化构造函数中的所有成员
年龄初始化(更像是作业)移到名称旁边吗?@chris this/\你的意思是什么?我希望这是一个纯粹的学术问题,你永远不会写那样的真实代码。别担心,你看起来还不是我的“真实”程序;)不是这样的。这只是我做的一个代码示例。如果这是我真正的代码,我会有一个合适的构造函数,正确地分配变量,删除指针等等(甚至不会为年龄lol使用指针)不:如果你有一个真正的程序,它不应该有指针或new
!:-)@KrRekSB是非常正确的,但是这种优化是超出我的:坑不是优化——它只是C++。您所拥有的看起来更像Java。。。
class Person{
public:
Person();
~Person();
Person (const Person& other) : name(other.name), age(new int(*(other.age)))
{
}
Person& operator = (const Person& other)
{
name = other.name;
delete age; //in case it was already allocated
age = new int(*(other.age))
return *this;
}
//alternatively
Person clone()
{
Person p;
p.name = name;
p.age = new int(age);
return p;
}
string name;
int* age;
};