CS 112 - Week 7 Lecture 2 - 2022-10-06 TODAY WE WILL * STOP 6.5 - dynamic arrays of objects, arrays of pointers to objects, dynamic arrays of pointers to objects...! * start (but not finish) STOP 7 - dynamic memory and classes (the "big 3") * prep for next class * get those first attempts at Homework 5's short-answer and programming problems in by 11:59 pm Friday, October 7 * watch for class emails as parts of Homework 6 become available * Current reading: Savitch Ch. 9, pointers and dynamic memory allocation ===== dynamic array of objects? static array of pointers to objects? dynamic array of pointers to objects? ...yes, all of these can be done, but be careful! ===== * see 112lect07-2.cpp! ==== STOP 7 - dynamic memory and classes (and the "big 3") * when a class has all-static data fields: Point p1(1, 1); Point p2 = p1; PlayerChar alphonse("Alphonse", 25, 10.6, "armour", 30); PlayerChar edward = alphonse; * if you do not explicitly declare and define an overloaded = operator (overloaded assignment operator) for a class, the one you get by default copies the data fields of the RHS into the data fields of the LHS * what about when a Point or PlayerChar is passed-by-value? ... how is that copy made, to copy an argument into a pass-by-value Point or PlayerChar parameter? By a method called the copy constructor, which the SYSTEM calls when appropriate (like for pass-by-value object parameters!) * and at the end of a method or function, how is a Point or PlayerChar object disposed of? using the default destructor method that is created if you don't explicitly create one. * so -- the defaults for these Big 3: destructor copy constructor overloaded assignment operator work fine for classes whose data fields are all single-valued static memory. WHAT IF: ...one of the data fields is a pointer to a dynamically-allocated array? * the default destructor won't free the memory for that data field's dynamically-allocated array -- that's a memory leak! if your class' constructors and/or methods dynamically allocate memory using new, you PROBABLY need to write a destructor to call delete as needed * and for overloaded assignment and copy constructor: ...if you copy a pointer data field, the copy's data field points to the SAME value in memory as the original (they're aliased...) ^ that's a so-called shallow copy if you want a so-called deeper copy, say making a new array and copying over the original's contents into the copy's copy, you explicitly define a copy constructor and overloaded assignment operator * we'll make a class that should have explicitly-defined destructor, copy constructor, and overloaded assignment operator methods next week, and talk about how you can write these as part of that.