64,682
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <set>
class AObject;
class AObjectManager : public std::set<AObject *>
{
public:
static AObjectManager &Instance()
{
static AObjectManager inst;
return inst;
}
private:
AObjectManager() {};
virtual ~AObjectManager() {};
};
class AObject
{
public:
AObject()
{
AObjectManager::Instance().insert(this);
}
AObject(const AObject &obj)
{
AObjectManager::Instance().insert(this);
}
virtual ~AObject()
{
AObjectManager::Instance().erase(this);
}
virtual void Print() = 0;
};
class AObjectX : public AObject
{
public:
AObjectX(int x = 0)
: m_x(x) {};
virtual void Print()
{
std::cout << "AObjectX(" << m_x << ")";
}
private:
int m_x;
};
class AObjectY : public AObject
{
public:
AObjectY(int y = 0)
: m_y(y) {};
virtual void Print()
{
std::cout << "AObjectY(" << m_y << ")";
}
private:
int m_y;
};
static void PrintAllObjects(int traceindex = 0)
{
std::cout << "PrintAllObjects: " << traceindex << std::endl;
for (AObjectManager::const_iterator it = AObjectManager::Instance().begin(); it != AObjectManager::Instance().end(); ++it)
{
AObject *pObj = *it;
if (!pObj)
{
std::cout << "error!" << std::endl;
continue;
}
pObj->Print();
std::cout << std::endl;
}
std::cout << std::endl;
}
int main()
{
AObjectX *px1 = new AObjectX(1);
AObjectY *py1 = new AObjectY(1);
{
AObjectX x2(5);
PrintAllObjects(0);
AObjectX x3 = x2;
PrintAllObjects(555);
}
PrintAllObjects(1);
delete px1;
PrintAllObjects(2);
delete py1;
PrintAllObjects(3);
return 0;
}
#include <iostream>
#include <vector>
#include <boost/shared_ptr.hpp>
class Base {
public:
virtual void fun() = 0;
};
class A : public Base {
public:
virtual void fun() {
std::cout << "A::fun()" << std::endl;
}
};
class B: public Base {
public:
virtual void fun() {
std::cout << "B::fun()" << std::endl;
}
};
int main()
{
std::vector<boost::shared_ptr<Base> > v;
v.push_back(boost::shared_ptr<Base>(new A));
v.push_back(boost::shared_ptr<Base>(new B));
v[0]->fun();
v[1]->fun();
}