Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2014, 06:55   #1
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию c++11 копирование виртуального базового класса

Добрый день.
С++11 ввёл move, в связи с этим проблема:
Код:
#include <iostream>
#include <vector>
using namespace std;


struct S
{
    vector<int> s_v {1, 2, 3};
    //S(S&&) = delete;                         // use of deleted function
    //S& operator = (S&&) = delete;     // use of deleted function
};

struct D1 : virtual S {};
struct D2 : virtual S {};
struct D3 : D1, D2 {};

D3 f() {return {};}

int main()
{
    D3 e, r;
    e = f();
    r = f();
    cout << e.s_v.size() << '\n';   // cout : 0
    cout << r.s_v.size() << '\n';   // cout : 0
    return 0;
}
Перемещающий operator = был вызван дважды у базового класса S. В итоге массивы e и r пусты.
Естественно меня это не устраивает, мне нужно вызвать копирующий operator =. Как объяснить компилятору, что вызывать следует копирующую версию (поведение до c++11)?
220Volt вне форума Ответить с цитированием
Старый 10.08.2014, 07:39   #2
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Это работает:
Код:
struct S
{
    vector<int> s_v;
    S(): s_v{1,2,3} {}
    S(S &s) = default;
    S& operator = (S &s) = default;
    S(S &&s): S{s} {}
    S& operator = (S &&s) {*this = s; return *this;}
};
но компилятор выплёвывает предупреждения (clang, gcc). Наверное можно по-другому?
220Volt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ проблема с конструктором базового класса halcyon Помощь студентам 7 09.05.2012 10:05
Создание базового класса ScrappyCoco Общие вопросы C/C++ 3 24.04.2012 15:51
Функция базового класса вызывает критическую ошибку при вызове для класса-потомка Archet Общие вопросы C/C++ 7 17.01.2012 20:17
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов Lanx Помощь студентам 0 06.04.2011 20:24
Наследование виртуального класса Юра_YUYU Общие вопросы C/C++ 2 30.01.2010 22:39