С ++ конструктор копирования по указателю

Здравствуйте, я хочу создать новую переменную класса, которая является указателем и инициализировать его с помощью конструктора копирования. Хотя я знаю, как работает конструктор копирования по ссылке, я не могу понять, как это сделать. Вы можете мне помочь? Например, у меня есть это определение:

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, следует использовать оператор ->.

Другие вопросы по тегам