Untitled

mail@pastecode.io avatar
unknown
c_cpp
2 years ago
1.0 kB
3
Indexable
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);
}