Załóżmy, że chcę wywołać funkcję zewnętrzną mojego obiektu, aby wykonać pewne sprawdzenia wewnątrz konstruktora ciała. Ponieważ czas życia obiektu rozpoczyna się, gdy ciało wykonawcy kończy wykonywanie, czy jest to projekt niebezpieczny?C++: czas życia obiektu i funkcji zewnętrznych
struct A;
void check(A const&) { /* */ }
struct A
{
A() { check(*this); }
};
To znaczy, ja dzwonię i funkcja zewnętrzna z nie-jeszcze-żywy obiekt. Czy jest to niezdefiniowane zachowanie?
Podobne pytania: jeśli umieściłem tę funkcję sprawdzającą jako funkcję składową (statyczną lub nie), co standard mówi o korzystaniu z obiektów nieżywych poza konstruktorem, ale wewnątrz klasy?
Czy istnieje jakaś różnica w koncepcji życiowej między punktem widzenia klasy i jej użytkowników (rodzaj życia w klasie a poza klasą)?
[C++ FAQ] (https://isocpp.org/wiki/faq/ctors#using-this-inctors) ma informacje na ten temat. –
Powinno być w porządku, o ile funkcja nie jest wirtualnym elementem i nie znajduje się na liście inicjującej. – KABoissonneault
A const & jest odniesieniem i nie jest ani inicjowany na początku sprawdzania, ani niszczony na końcu funkcji. Poza tym w konstruktorze obiekt jest w pełni skonstruowany. Nie widzę żadnego problemu w tym kodzie – Brahim