次のコードは、出力します
Derived
Base
Base
しかし、すべてのDerivedオブジェクトをUser :: itemsに入れて、独自のprint関数を呼び出す必要がありますが、基本クラスのオブジェクトは必要ありません。ポインターを使用せずにそれを達成できますか?それが不可能な場合、メモリリークが発生しないように、User :: itemsを1つずつ削除してメモリを解放する関数を作成するにはどうすればよいですか?
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Base{
public:
virtual void print(){ cout << "Base" << endl;}
};
class Derived: public Base{
public:
void print(){ cout << "Derived" << endl;}
};
class User{
public:
vector<Base> items;
void add_item( Base& item ){
item.print();
items.push_back( item );
items.back().print();
}
};
void fill_items( User& u ){
Derived d;
u.add_item( d );
}
int main(){
User u;
fill_items( u );
u.items[0].print();
}