より効果的な C++項目 3: 配列をポリモーフィックに扱うことはありません に基づいて、配列をポリモーフィックに扱うことは避ける必要があります。
では、なぜstd::vector
基底クラスを指すポインターを問題なく保持できるのでしょうか?
ありがとうございました
#include <iostream>
#include "boost/shared_ptr.hpp"
#include <vector>
class BaseClass {
public:
virtual void PrintMe() const {
std::cout << "BaseClass" << std::endl;
}
virtual ~BaseClass() {}
};
class SubClass : public BaseClass {
public:
virtual void PrintMe() const {
std::cout << "SubClass" << std::endl;
}
};
int main()
{
std::vector<boost::shared_ptr<BaseClass> > vecPtrs;
boost::shared_ptr<BaseClass> shp1(new BaseClass);
vecPtrs.push_back(shp1);
boost::shared_ptr<BaseClass> shp2(new SubClass);
vecPtrs.push_back(shp2);
for (size_t i = 0; i < vecPtrs.size(); ++i)
{
vecPtrs[i]->PrintMe();
}
}
// Output:
BaseClass
SubClass
Press any key to continue . . .