Как реализовать конструктор копирования, когда элемент не сохраняется в вашем классе? - PullRequest
0 голосов
/ 08 декабря 2011
Например,

, ваш конструктор может выглядеть так:

myClass::myClass(Mesh &mesh) : baseClass(mesh) 
{
    pointer = new Thing(mesh);
}

Сетка не хранится в myClass, а также нет метода получения сетки в baseClass, где она хранится.Является ли это просто случаем реализации геттера в базовом классе?

например, вы не можете сделать это:

myClass::myClass(const myClass& original) : baseClass(mesh) //there is no mesh
{
    pointer = new Thing(mesh); //mesh is no longer in the parameter list
} 

Как компилятор делает эту копию, когда создает конструктор копирования по умолчанию для таких классов?Или это тот случай, когда необходим конструктор копирования?Сетка не является частным элементом мозга, и для нее нет добытчика, так как нам создать новую вещь?

РЕДАКТИРОВАТЬ - Обновлена ​​проблема, добавив Thing

Ответы [ 3 ]

6 голосов
/ 08 декабря 2011

mesh необходимо скопировать в конструкторе копирования baseClass.

class baseClass
{
  Mesh myMesh;
public:
  baseClass(const baseClass &other) : myMesh(other.myMesh) {} // <--- copy Mesh
};

class myClass : public baseClass
{
public:
  myClass(const myClass& other) : baseClass(other) {} // <--- simply pass
};
3 голосов
/ 08 декабря 2011

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

Конструктор копирования по умолчанию для myClass просто вызывает конструктор копирования для базового класса (и для каждого другого члена).

1 голос
/ 08 декабря 2011

Конструктор канонического копирования будет:

MyClass::MyClass( MyClass const& other )
    :  BaseClass( other )
{
}

Конструктор копирования для BaseClass будет принимать константную ссылку на BaseClass, а other будет преобразовываться неявно.Затем конструктор копирования для BaseClass будет делать все, что нужно.

Это неявно сгенерированный конструктор, поэтому вам не нужно его предоставлять, если вы довольны другими аспектами сгенерированных конструкторов:общедоступный и встроенный.

...