我是c ++(和编程)的新手,我制作了这段代码:
主:
int main(){
aircraft_list<planes> plane_list;
plane_list.add();
}
飞机的构造函数:
planes::planes(){
//initializing some vars
}
添加():
template <class T> aircraft_list<T>& aircraft_list<T>::add(){
chain_node<T> *y=new chain_node<T>;
planes obj;
y->data=obj;
y->link=first;
first=y;
return *this;
}
aircraft_list的构造函数:
aircraft_list(){
first=0;
}
aircraft_list的析构函数:
template <class T> aircraft_list<T>::~aircraft_list(){
chain_node<T> *next;
while(first){
next=first->link;
delete first;
first=next;
}
}
从上一个问题开始,我查看了三个规则并修复了析构函数的问题,但仍然无法理解为什么构造函数被调用两次......当我注释掉时:
planes obj;
y->data=obj;
构造函数被调用一次......它创建的对象会发生什么?
修改
aircraft_list class:
template <class T>
class aircraft_list{
friend class planes;
public:
aircraft_list(){
first=0;
}
~aircraft_list();
int search(const T &x) const;
aircraft_list<T>& del(const T &x);
aircraft_list<T>& add();
private:
chain_node<T> *first;
};
chain_node类:
template <class T> class aircraft_list;
template <class T> class chain_node{
public:
T data;
chain_node<T> *link;
};
答案 0 :(得分:0)
简单地说:你至少有两个飞机物体。
一个在
上定义 planes obj;
这很容易发现。 另一个有点困难,而且你在这里实际上没有贴上一些代码。
chain_node<T> *y=new chain_node<T>;
因为你的chain_node有一个类型为T的数据,而T的类型为plane,当你创建一个chain_node,而chain_node在它的结构体上有一个平面时,它也会创建一个新的平面实例。