我创建了这个简单的程序来学习 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);
};
方法
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;
}
树
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;
}
树找到父级
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;
}
}
}
树添加
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;
}
}
}
主要的:
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;
}
现在 q 是,为什么不工作,为什么给出这个输出:
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
修复它现在是 diff 似乎节点只是被创建和删除而不是添加到树为什么?