我有一个容器类(即容器)持有shared_ptr初始化不同的 类的基类。我已经实现了这个想法,如下面的代码。将shared_ptr参数添加到容器的有效方法?
问题1>总体而言,你可以找到下面的代码的任何潜在的问题? 我对最佳做法感兴趣,并且当前通过vs2010和 的代码已输出预期结果。
问题2>难道我设计集装箱::添加签名,以便 客户需要在一个shared_ptr通过正确的方式?
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class Base
{
public:
virtual void PrintMe(void) = 0;
virtual ~Base() = 0 {} // **Updated based on comments from [bdonlan]**
};
class SubClassA : public Base
{
public:
virtual void PrintMe(void)
{ cout << "This is SubClassA" << endl; }
};
class SubClassB : public Base
{
public:
virtual void PrintMe(void)
{ cout << "This is SubClassB" << endl; }
};
typedef std::shared_ptr<Base> BasePtr;
typedef std::vector<BasePtr>::iterator VecIter;
class Container
{
public:
void Add(BasePtr ptr)
{ vec.push_back(ptr); }
void PrintAll()
{
for (VecIter iter = vec.begin() ; iter < vec.end(); ++iter)
{ (*iter)->PrintMe(); }
}
private:
vector<BasePtr> vec;
};
int _tmain(int argc, _TCHAR* argv[])
{
Container con;
BasePtr ptrA(new SubClassA);
BasePtr ptrB(new SubClassB);
con.Add(ptrA);
con.Add(ptrB);
con.PrintAll();
return 0;
}
可能更好地放在CodeReview上? –
那是哪里?你能告诉我这个位置吗? – q0987
你可以在这里找到它:http://codereview.stackexchange.com/questions :) –