Я столкнулся с небольшой проблемой в коде C ++, который легче всего описать с помощью кода. У меня есть классы, которые что-то вроде:
class MyVarBase
{
}
class MyVar : public MyVarBase
{
int Foo();
}
class MyBase
{
public:
MyBase(MyVarBase* v) : m_var(v) {}
virtual MyVarBase* GetVar() { return m_var; }
private:
MyVarBase* m_var;
}
У меня также есть подкласс MyBase, который должен иметь член типа MyVar, потому что он должен вызывать Foo. Перемещение функции Foo в MyVarBase не вариант. Имеет ли смысл сделать это:
class MyClass : public MyBase
{
public:
MyClass(MyVar* v) : MyBase(v), m_var(v) {}
MyVar* GetVar() { return m_var; }
private:
MyVar* m_var;
}
Кажется, это работает, но выглядит очень плохо, и я не уверен, что это вызовет утечку памяти или сломает конструктор копирования. Мои другие варианты могут заключаться в том, чтобы назвать переменную MyVar в MyClass как-нибудь иначе, но иметь ее равной указателю m_var в базе, или шаблонизировать MyBase для типа MyVar.
Все эти варианты не кажутся идеальными, поэтому я хотел бы знать, сталкивался ли кто-либо еще с подобной ситуацией и есть ли хороший способ заставить его работать.