Ram*_*uer 1 c++ memory allocation dynamic
大家好,我找不到为动态分配的对象构建正确的复制构造函数的方法.它大喊:error: no matching function for call to 'Person::(Person*&')
我的测试代码是这样的:
#include <iostream>
#include <cstring>
class Person
{
private:
int* age;
std::string name;
public:
Person(std::string name_in, int age_in);
Person(const Person& other);
~Person();
void printAge();
void printName();
};
Person::Person(std::string name_in, int age_in)
{
std::cout << "Creating person named " << name_in << std::endl;
name = name_in;
age = new int;
*age = age_in;
}
Person::Person(const Person& other)
{
std::cout << "Copying person." << std::endl;
age = new int;
*age = *other.age;
name = other.name;
}
Person::~Person()
{
std::cout << "Freeing memory!" << std::endl;
delete age;
}
void Person::printAge()
{
std::cout << "The age is " << *age << std::endl;
}
void Person::printName()
{
std::cout << "The name is " << name << std::endl;
}
int main()
{
Person* person1 = new Person("Ramon", 19);
person1->printAge();
person1->printName();
Person* person2 = new Person(person1);
person2->printAge();
person2->printName();
delete person1;
delete person2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
似乎当创建person2对象时,它只是指向person1的指针,但它不是!我说它是一个新的动态分配对象:Person* person1 = new Person("Ramon", 19);.知道这可能是什么原因?
谢谢.
复制构造函数通过引用而不是指针来获取输入参数.
改变这个:
Person* person2 = new Person(person1);
Run Code Online (Sandbox Code Playgroud)
对此:
Person* person2 = new Person(*person1);
Run Code Online (Sandbox Code Playgroud)