test2 の引数ありコンストラクタでオブジェクトを生成すると test1 のデフォルトコンストラクタが起動しますが,下記のように動的割り当てを行っている場合,損をしていますよね?(多分・・・・環境にもよるんでしょうが・・・100 個の配列を用意してもtest2で50 個の配列を新しく指すようにしているので100個の配列分の領域が残ってるから・・・・・
この損を無くして,うまく制御するというか・・・test2のオブジェクトの生成時に意図的にtest1のデフォルトコンストラクタを起動させないような感じの仕組みはありますか?やはり,test2の引数ありコンストラクタでdeleteを行うしか手はないのでしょうか?
#include<iostream> class test1 { protected: int* data; int i; int j; public: test1() : i(0), j(2) {data = new int[100];} }; class test2 : public test1 { private: int x, y; public: test2() : x(0), y(2) {} test2(int sz) {data = new int[sz];} }; int main(void) { test2 ts2(50); return 0; }