Не как таковой, но - если производительность не является проблемой, вы можете добавить флаг, который указывает, что строительство завершено, и использовать его для сбоя во время выполнения с такими вызовами:
class A {
// ... whatever ...
public:
A() {
// do construction work
constructed = true;
}
foo() {
if (not constructed) {
throw std::logic_error("Cannot call foo() during construction");
}
// the rest of foo
}
protected:
bool constructed { false };
}
Вы также можете использовать эти проверки только при компиляции в режиме DEBUG (например, с условной компиляцией с использованием препроцессора - #ifndef NDEBUG
), чтобы во время выполнения вы не получали потери производительности. Имейте в виду noexcept
S хотя.
Альтернативой метанию может быть assert()
'ing.