实习结束了,又返回了大学,私认为我的c++水平虽然算不上登堂入室,也算不上熟练的c++程序员,养活自己也可以了,但学校系部仍然把C++这门选修课给我安排成了 必选选修,但这也算是重新梳理、重新总结(写博客)的机会。
所以,作为梳理c++的第一篇blog,应该着重于整体梳理c++的重点知识,so,这篇文章的主要内容解释 五朵金花,也就是c++的 构造函数、 析构函数、 拷贝构造、 拷贝赋值以及 移动构造和移动赋值。
构造函数
构造函数时一个对象创建时第一个调用的函数,但不是第一条执行的语句。如果你键入以下代码,应该(肯定)可以看到下列结果
class A{
public:
A(){
std::cout<<"in A constructor"<<std::endl;
}
};
auto main()-> int{
A a;
std::cout<<"in Main" <<std::endl;
std::cin.get();
}
结果
>>in A constructor
>>in Main
这就代表了A对象的构造函数被默认调用了。
小技巧
如果你习惯了使用java,你可能会使用这种方式创建一个无参数的对象,
A a()
但请注意,这种方式在c++中被解释为函数声明,意思是:有个函数,他的名字为a,没有参数,返回值为A类型对象。
析构函数
与构造函数相对应,析构函数被在对象被释放是默认调用。
对象的释放时机有:
- 作用域结束
类似于if 、 for 、while 或者只是一个{}而已
class A{
public:
A(){
std::cout<<"in A constructor"<<std::endl;
}
~A(){
std::cout<<"in A destructor"<<std::endl;
}
};
auto main()-> int{
{
A a;
}
std::cin.get();
}
结果应该为
>> in A constructor
>> in A destructor
- 函数结束