Существующий вопрос Почему я не могу инициализировать массив объектов, если у них есть частные конструкторы копирования? специально относится к С++ 03. Я знаю из этого вопроса, что то, что я пытаюсь сделать, не разрешено в С++ 03, но я думал, что это должно быть возможно в С++ 11
У меня есть недвижущийся класс (назовите его Child), и мне нужно инициализировать массив Child в конструкторе другого класса (назовите его Parent). Под "не движимым" я подразумеваю, что адрес дочернего объекта должен оставаться неизменным во время этого срока жизни объекта. Каков правильный способ сделать это?
С С++ 11 я пробовал следующее:
class Child
{
public:
Child (int x) {}
~Child () {}
Child (const Child &) = delete;
};
class Parent
{
public:
Parent () : children {{5}, {7}} {}
private:
Child children[2];
};
Этот код компилируется с помощью Clang 3.5.0, но GCC 4.9.1 жалуется, что я пытаюсь использовать конструктор удаленной копии:
test.cc: In constructor ‘Parent::Parent()’:
test.cc:13:35: error: use of deleted function ‘Child::Child(const Child&)’
Parent () : children {{5}, {7}} {}
^
test.cc:7:5: note: declared here
Child (const Child &) = delete;
^
Я читал о различии между копированием-инициализацией и прямой инициализацией (здесь и здесь, например), и я хочу избежать вызова конструктора копирования, используя прямую инициализацию. Я неправильно понимаю синтаксис? Это ошибка в GCC? Или я пытаюсь сделать это просто невозможно?