Виртуальное наследование и возврат объекта
От: _NN_ www.nemerleweb.com
Дата: 11.11.19 21:56
Оценка:
Имеем иерархию классов. Base <|- Derived <|- FinalClass <|- FinalClassEx
Почему при виртуальном наследовании Derived от Base нельзя возвратить объект из функции, а без него можно ?

class Base
{
public:
    explicit Base(char const*) {}
    Base() {}

    Base(const Base&) = delete;
    Base& operator=(const Base&) = delete;
};


class Derived : virtual public Base // Compiles without virtual
{
public:
    Derived() {}
    Derived(Derived&&) {}

    Derived& operator=(Derived&&) { return *this; }
    Derived(const Derived&) = delete;
    Derived& operator=(const Derived&) = delete;
};

class FinalClass  : public Derived
{   
public:
    FinalClass() {}
    FinalClass(FinalClass&&) {}

    FinalClass& operator=(FinalClass&&) { return *this; }
    FinalClass(const FinalClass&) = delete;
    FinalClass& operator=(const FinalClass&) = delete;
};


FinalClass f1()
{
    FinalClass f;
    return f;
}


class FinalClassEx : public FinalClass
{
public:
using FinalClass::FinalClass;
};

FinalClassEx f2()
{
    FinalClassEx f;
    return f;
}

int main()
{
    auto v1 = f1();
    auto v2 = f2();

    return 0;
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.