In C ++, there is no built-in construct that does what you want, but you can always do it yourself.
#include <iostream>
class Base{
public:
Base() = default;
void make_sure_im_called() {
before_make_sure_im_called();
after_make_sure_im_called();
}
protected:
virtual void before_make_sure_im_called() = 0;
virtual void after_make_sure_im_called() = 0;
};
class Child : public Base {
protected:
virtual void before_make_sure_im_called() override
{
std::cout << "I was called as intended." << std::endl;
};
virtual void after_make_sure_im_called() override {}
}
2 ( 1 ).
- make_sure_im_called, .
, , .
.
make_sure_im_called Base. , , , .
#include <iostream>
class Base{
public:
Base() = default;
~Base() { assert(_initialized && "Some message"); }
void make_sure_im_called() {
before_make_sure_im_called();
after_make_sure_im_called();
_initialized = true;
}
protected:
virtual void before_make_sure_im_called() = 0;
virtual void after_make_sure_im_called() = 0;
private:
bool _initialized{false};
};
class Child : public Base {
protected:
virtual void before_make_sure_im_called() override {};
virtual void after_make_sure_im_called() override {}
}
_initialized, . Dtor , ( -?). : ///.
, , , , . API.