I have created this simple program to learn shared_ptr
using namespace std;
#define Yes 1
#define No 0
class Node
{
public:
boost::shared_ptr<Node> left;
boost::shared_ptr<Node> rigth;
int nVal;
Node();
Node(int);
~Node();
int getVal(void);
void setVal(int);
};
Methods
Node::Node()
{
cout << "creating node empty" << endl;
nVal = 0;
left.reset();
rigth.reset();
}
Node::~Node()
{
cout << "entering destructor" << nVal << endl;
}
Node::Node(int n)
{
cout << "creating node with value" << n << endl;
nVal = n;
left.reset();
rigth.reset();
}
int Node::getVal(void)
{
cout << "returning value" << endl;
return this->nVal;
}
void Node::setVal(int n)
{
cout << "setting value" << endl;
nVal = n;
}
Tree
class Tree
{
public:
boost::shared_ptr<Node> root;
Tree();
~Tree();
void findParent(int n, int &found, boost::shared_ptr<Node> &parent);
void add(int n);
void post(boost::weak_ptr<Node> q);
void del(int n);
};
Tree::Tree()
{
root.reset();
}
Tree::~Tree()
{
cout << "deleting tree" << endl;
}
Tree find parent
void Tree::findParent(int n, int& found, boost::shared_ptr<Node> &parent)
{
boost::shared_ptr<Node> q;
found = No;
cout << "looking parent of" << n << endl;
if(parent.use_count() == 0)
{
cout << "not found" << endl;
return;
}
q=parent;
while (!q.use_count())
{
if( q->nVal == n)
{
cout << "found" << endl;
found = Yes;
return;
}
if (q->rigth->nVal)
{
cout << "looking to the rigth" << endl;
parent = q;
q = q->left;
}
else
{
cout << "looking to the left" << endl;
parent = q;
q = q->rigth;
}
}
}
Tree add
void Tree::add(int n)
{
int found;
boost::shared_ptr<Node> parent;
findParent(n, found,parent);
if(found == Yes)
{
cout << "no such node exist" << endl;
}
else
{
boost::shared_ptr<Node> t(new Node(n));
t->rigth.reset();
t->left.reset();
if (parent.get()== 0)
{
parent = t;
}
else
{
parent->nVal > n ? parent->left = t : parent->rigth = t;
}
}
}
Main:
int THREADS_HOW_MANY = 0;
int main()
{
Tree bt;
bt.add(10);
bt.add(4);
bt.add(12);
bt.add(2);
bt.add(8);
bt.add(15);
bt.add(15);
return 0;
}
Now the q is, why is is not working, why is giving this output:
empty constructor only the root is reset
looking parent of10
not found
creating node with value10
entering destructor10
looking parent of4
not found
creating node with value4
entering destructor4
looking parent of12
not found
creating node with value12
entering destructor12
looking parent of2
not found
creating node with value2
entering destructor2
Fixed it now is diff it seem that the nodes are just being created and deleted not added to a tree why??