С ++ конструктор копирования по указателю
Здравствуйте, я хочу создать новую переменную класса, которая является указателем и инициализировать его с помощью конструктора копирования. Хотя я знаю, как работает конструктор копирования по ссылке, я не могу понять, как это сделать. Вы можете мне помочь? Например, у меня есть это определение:
class A{
public:
int a;
private:
};
и в другом сегменте кода я делаю следующее:
A *object= new A;
A->a=10;
A *newobject= new A(*object);
но я получаю ошибку сегментации. Вы можете мне помочь? Я также попробовал:
A *newobject= new A(&(*object));
но это тоже не работает.
3 ответа
С этим простым примером, следующий, который использует конструктор побитового копирования по умолчанию, работает нормально.
Простой класс выглядит
class Bclass {
public:
int iValue;
};
И код для использования конструктора копирования выглядит так:
Bclass *pObject = new Bclass;
pObject->iValue = 10;
Bclass *pObject2 = new Bclass (*pObject);
Используя Microsoft Visual Studio 2005, вышеописанное работает нормально.
Смотрите также Реализация конструктора копирования.
Эти строки в вашем примере даже не должны компилироваться:
A *object= new A;
A.a=10;
Что вы имеете в виду
Foo *object = new Foo;
object->a = 10;
Правильно?
Отредактировано, чтобы добавить:
Что произойдет, если вы попробуете код, опубликованный @Alok Save?
Поскольку имя класса Foo, а не A, объект Foo должен быть создан.
class Foo{
public:
int a;
private:
};
Foo *object= new Foo;
object->a=10;
Теперь, поскольку объект является указателем на класс Foo, следует использовать оператор ->.