Я использую множественное наследование, а один базовый класс (BaseBNeedsA
) нуждается в доступе к другому базовому классу (BaseA
). Я знаю, что это можно было бы решить с помощью делегирования, но на самом деле было бы очень много кода пересылки, и у меня есть несколько подобных классов, таких как BaseBNeedsA
.C++: Почему это компилируется? (Передача этой ссылки на базовый класс)
В Visual Studio 2013 я мог бы использовать BaseA &
для доступа, в Visual Studio 2015 это, похоже, приводит к нарезке объектов или чему-то еще. (Компилирует, но ссылки недействительны). Поэтому я изменил его на BaseA * const
, и все работает. Однако, делая это, я нашел что-то странное. Код ниже компилируется в Visual Studio 2015, и я не могу понять, почему он должен.
class BaseA
{ };
class BaseBNeedsA
{
public:
BaseBNeedsA(BaseA *baseA)
: _baseA(baseA)
{ }
private:
BaseA * const _baseA;
};
class Derived : public BaseA, public BaseBNeedsA
{
public:
Derived()
: BaseA(),
BaseBNeedsA(*this) // Why does this compile? Handing a BaseA&, but BaseA* required!
{ }
};
int main(int argc, char** argv)
{
Derived d;
return 0;
}
он называет копировальный конструктор 'BaseBNeedsA' –
@PiotrSkotnicki Это не комментарий! – Yakk
Как я пропустил это. Сделайте это ответом, чтобы я мог принять его. – B3ret