Мне интересно, есть ли какая-либо причина явно писать код, который делает то же самое, что и поведение С++ по умолчанию.
Вот код:
class BaseClass
{
public:
virtual ~BaseClass() {}
virtual void f() { /* do something */ }
};
class ExplicitClass
: public BaseClass
{
public:
ExplicitClass()
: BaseClass() // <-- explicit call of base class constructor
{
// empty function
}
virtual ~ExplicitClass() {} // <-- explicit empty virtual destructor
virtual void f() { BaseClass::f(); } // <-- function just calls base
};
class ImplicitClass
: public BaseClass
{
};
Мне в основном любопытно в сфере рефакторинга и изменения кодовой базы. Я не думаю, что многие программисты намереваются написать такой код, но он может выглядеть так, как будто код меняется со временем.
Есть ли смысл оставлять код, присутствующий в ExplicitClass
? Я вижу бонус, что он показывает вам, что происходит, но он встречается как склонный к риску и рискованный.
Лично я предпочитаю удалить любой код, который является кодом поведения по умолчанию (например, ImplicitClass
).
Есть ли какой-либо консенсус в пользу того или другого?