Considerate questo esempio del codice:È sicuro associare un riferimento a un oggetto non ancora costruito in C++?
class Base {
public:
Base(string& _object) : object(_object) {}
private:
string& object;
};
class Derived: public Base {
public:
Derived() : Base(object) {}
private:
string object;
};
Ovviamente prima Base
è costruita e si passa un riferimento a un oggetto non ancora costruito.
La memoria è allocata per l'intero oggetto Derived
, quindi Derived::object
è nella memoria legalmente accessibile, solo il suo costruttore non è stato eseguito. Base::Base()
non chiama alcun metodo dell'oggetto passato, memorizza solo il riferimento. Funziona in Visual C++ 9.
È sicuro secondo lo standard C++?
Buona domanda. L'ho fatto in uno dei miei progetti, e sta funzionando bene; mai visto alcun problema. Ma mi piacerebbe sapere se è "sicuro". – Nawaz