这里是一个最小程序,可输出C-tor和D-tor,以及移动/复制操作。
令我着迷的是,尽管在示波器范围内有三个实体被销毁(显示的是D-tors),但输出中只有一个C-tors。
那么为什么只显示一个C-tor?以及我们该如何处理(显示它们),或者如果我有误解,那我们应该知道些什么。
#include <iostream>
class Subject{
public:
Subject(){
std::cout<<"Default C-tor"<<std::endl;
}
Subject(int data):mdata(data){
std::cout<<"C-tor"<<std::endl;
}
virtual~Subject(){
std::cout<<"D-tor"<<std::endl;
}
Subject(Subject const& subject): mdata(subject.mdata){
std::cout<<"Object copied"<<std::endl;
}
Subject& operator=(Subject const& subject){
if(this != &subject){
mdata=subject.mdata;
std::cout<<"Object copied"<<std::endl;
}
return *this;
}
Subject(Subject const&& subject): mdata(std::move(subject.mdata)){
std::cout<<"Object moved"<<std::endl;
}
Subject& operator=(Subject const&& subject){
if(this != &subject){
mdata=std::move(subject.mdata);
std::cout<<"Object moved"<<std::endl;
}
return *this;
}
friend std::ostream& operator<<(std::ostream& out, Subject const& subject){
out<<subject.mdata<<std::endl;
return out;
}
protected:
int mdata;
};
int main()
{
Subject subject{42};
Subject copySubject{subject};
Subject moveSubject = std::move(subject);
return 0;
}
注意,如果我像这样声明copySubject
和moveSubject
:>
Subject copySubject{}; Subject moveSubject{};
它将通过调用默认构造函数来工作。
这里是一个最小程序,可输出C-tor和D-tor,以及移动/复制操作。令我感兴趣的是,尽管有三个实体,但输出中只有一个C-tor,即...
所以为什么只显示一个C-tor?