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

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

class A{
public:
 int a;
private:
};

и в другом сегменте кода я делаю следующее:

A *object= new A;
A->a=10;

A *newobject= new A(*object);

но я получаю ошибку сегментации. Можешь мне помочь? Я также пробовал:

 A *newobject= new A(&(*object));

но это тоже не работает.


person JmRag    schedule 18.05.2013    source источник
comment
Пожалуйста, отправьте полный, компилируемый образец. Фу против А? A.a против объекта-›a?   -  person Scott Jones    schedule 18.05.2013
comment
Хорошо работает, если удалить очевидные ошибки. Важный вопрос: почему вы все равно хотите это сделать?   -  person Alok Save    schedule 18.05.2013
comment
Чтобы сделать очередь без использования STL полностью динамической   -  person JmRag    schedule 18.05.2013


Ответы (3)


В таком простом примере следующий, который использует конструктор побитового копирования по умолчанию, отлично работает.

Простой класс выглядит так

class Bclass {
public:
    int iValue;
};

И код для использования конструктора копирования выглядит так:

Bclass *pObject = new Bclass;
pObject->iValue = 10;

Bclass *pObject2 = new Bclass (*pObject);

Используя Microsoft Visual Studio 2005, вышеизложенное работает нормально.

См. также Реализация конструктора копирования.

См. также Конструктор копирования для указателей на объекты.

person Richard Chambers    schedule 18.05.2013

Эти строки в вашем примере даже не должны компилироваться:

A *object= new A;
A.a=10;

Что вы имеете в виду

Foo *object = new Foo;
object->a = 10;

Правильно?

Отредактировано для добавления:

Что происходит, когда вы пытаетесь использовать код, опубликованный пользователем @Alok? Сохранить?

person egrunin    schedule 18.05.2013
comment
Да, я написал это в спешке! Проблема ниже! - person JmRag; 18.05.2013

Поскольку имя класса Foo, а не A, необходимо создать объект Foo.

class Foo{
  public:
  int a;
  private:
}; 

 Foo *object= new Foo;
 object->a=10;

Теперь, поскольку объект является указателем на класс Foo, следует использовать оператор ->.

person Denzil    schedule 18.05.2013