CS 70

Key Points

  • Object lifetime on the stack: when?
    • Allocation: at the opening { of the function
    • Initialization: at the declaring line
    • Use: between initialization and destruction
    • Destruction: at the closing } of the declaring block
    • Deallocation: at the closing } of the function
  • Default initialization/construction
    • int x;
    • Cow mabel;
    • Cow bessie{};
    • For an object, invokes the default (parameterless) constructor
  • Copy initialization/construction
    • Creates a new object that is a copy of an exiting object
    • int x = y;
    • int a{b};
    • Cow mabel = adeline;
    • Cow bessie{fennel};
    • For an object, invokes the default constructor (which takes a reference to an object of the same type)
    • Also used to initialize function parameters and return values
  • Assignment operator
    • Changes an existing object to be a duplicate of another existing object
    • s = t;
    • cadewyn = ethyl;
    • For an object, invokes the assignment operator, a special member function called operator=.
  • Destructor
    • A special member function that is automatically invoked when an object is destroyed
    • For class Cow, the destructor is named ~Cow
    • Typically used to “clean up” or release any resources the object is holding onto
  • The compiler can synthesize or disable these functions:
    • Cow(); // Means that the programmer will define the default constructor
    • Cow() = default; // Means that we will use the compiler's synthesized default constructor
    • Cow() = delete; // Means that this class does not have a default constructor
    • Same for default constructor, copy constructor, assignment operator, and destructor (but don't disable the destructor!!)
  • For arrays, the same as above, only \( N \) times, where \( N \) is the size of the array.
  • For references, initialization and destruction mark the usage period of the name
    • We don't model any allocation or deallocation for references
  • For data members of a class
    • Allocation happens when the object is allocated
    • Initialization happens before the opening { of the constructor (so use the member-initialization list!)
    • Destruction happens at the closing } of the destructor
    • Deallocation happens when the object is deallocated

(When logged in, completion status appears here.)