class Example {
public:
Example(int& other) :
// upi: Default ctor kinullazza magat, ami tok jo.
// pi: Ha ezt nem nullazod ki akkor szemet lesz benne, ami biztos bug forras.
pi (nullptr)
// ri: Referencia nem lehet null, tehat ezt muszaj az init listaban beallitani.
ri(other)
// i: Default ctor kinullazza.
{
// upi es i itt is kaphat erteket, sot akar egy masik fuggvenyben is.
// Addig mindketto egy valid nulla erteket kepvisel.
// pi-vel es ri-vel muszaj foglalkozni mar az init listaban.
}
void lateSetter(int& newValue) {
upi.reset(&newValue);
i = newValue;
// Ez effektive ugyanaz mint "upi.reset(new int(5));" de szebb mert nincs
// lathato "new" hasznalat. Viszont a make_unique csak publikus ctorokkal
// tud dolgozni.
upi = std::make_unique<int>(5);
}
private:
std::unique_ptr<int> upi;
int* pi;
int& ri;
int i;
};
int main()
{
int externalI = 21;
Example e(externalI);
e.lateSetter(externalI);
}