【发布时间】:2017-04-27 16:06:35
【问题描述】:
我是 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;
};
【问题讨论】:
-
不要使用新的和自定义的列表
-
好吧,我做这个是为了一个任务,我必须创建一个
-
当你调用 plane_list.add();新对象的构造函数在 add() 函数中运行
-
如果您也提供类定义会有所帮助。从您发布的内容中我无法确定,但我猜
chain_node<T>的构造函数创建了一个T。
标签: c++