Можно ли использовать конструктор копирования с новым ключевым словом? Мой код также показывает, что 2 указателя obj имеют одинаковый адрес памяти?
#include <iostream>
using namespace std;
class Person{
public:
int age;
Person() { }
Person(const Person& p ) : age(p.age) { }
};
int main()
{
Person *p = new Person();
p->age = 15;
Person *y = p;
// Person *z = new Person(p); why no work???
// p and y have the same memory addres??
std::cout << p;
std::cout << y;
return 0;
}
Person *z = new Person(p); // why no work???
Поскольку p
является указателем, а не Person&
. Вам нужно разыменовать его, чтобы получить объект:
Person *z = new Person(*p);
// ^^
Лучше всего почти во всех отношениях
int main()
{
Person p;
p.age = 15;
Person y(p);
std::cout << &p;
std::cout << &y;
return 0;
}
new
не твой друг. new
- это враг всего, что есть RAII. Вниз с new
.
Потому что p - указатель.
Пытаться
Person *z = new Person(*p);