/////////////////////////////////////////////////// // MT3Q7.cpp - Node Destruction template Policy // // // // Jim Fawcett, CSE687 - Midterm, Spring 2010 // /////////////////////////////////////////////////// #include #include template class MNode { public: MNode(T t); ~MNode(); void addChild(MNode* pNode); T& value(); private: // won't define copy or assignment so make private MNode(const MNode& node); MNode& operator=(const MNode& node); std::vector*> children; T t_; }; template MNode::MNode(T t) : t_(t) {} template MNode::~MNode() { std::cout << "\n MNode destructor called"; for(size_t i=0; i void MNode::addChild(MNode* pNode) { children.push_back(pNode); } template T& MNode::value() { return t_; } template class DeallocPolicy { public: static void GoodBye( MNode >* pNode) { std::cout << "\n deleting MNode"; delete pNode; } }; template class NoDeallocPolicy { public: static void GoodBye(MNode >* pNode) { std::cout << "\n not deleting MNode as it is on the stack"; } }; void main() { std::cout << "\n MT3Q7 - Node Destruction Template Policy"; std::cout << "\n =========================================="; MNode< int, NoDeallocPolicy > node1(1); MNode< int, NoDeallocPolicy > node2(2); MNode< int, NoDeallocPolicy > node3(3); MNode< int, NoDeallocPolicy > node4(4); MNode< int, NoDeallocPolicy > node5(5); node1.addChild(&node2); node1.addChild(&node3); node1.addChild(&node4); node1.addChild(&node5); MNode< int, DeallocPolicy >* pNode1 = new MNode< int, DeallocPolicy >(1); MNode< int, DeallocPolicy >* pNode2 = new MNode< int, DeallocPolicy >(2); MNode< int, DeallocPolicy >* pNode3 = new MNode< int, DeallocPolicy >(3); MNode< int, DeallocPolicy >* pNode4 = new MNode< int, DeallocPolicy >(4); MNode< int, DeallocPolicy >* pNode5 = new MNode< int, DeallocPolicy >(5); pNode1->addChild(pNode2); pNode1->addChild(pNode3); pNode1->addChild(pNode4); pNode1->addChild(pNode5); delete pNode1; std::cout << "\n"; }