C++中三大函数:
析构函数
复制构造函数
=操作符(copy assignment operator)
这三个特殊的成员函数如果程序员没有实现,编译器将提供默认的实现方式。
析构函数:
形如~foo_t(),函数名和构造函数相同,前面加~,如果对象是自由变量创建,析构函数将在脱离作用域时调用。如果对象是通过new操作符创建的,则通过delete操作符调用析构函数。
复制构造函数:
形如foo_t(const foo_t& foo),以下情况复制构造函数均会被调用:
当对象按值返回时候(returned by value)
调用按值传参的函数(passed by value)
通过thrown抛出或caught捕获的对象
对象处于()包围的初始化列表中
=操作符:
重载=操作符,如foo_t& operator=(const foo_t& foo),对已有对象的赋值操作将调用该函数(未初始化的对象成员将调用复制构造函数)。
以下为代码实例:
代码如下 | 复制代码 |
#include #include classfoo_t { friendstd::ostream &operator<<(std::ostream &os, foo_tconst&foo) { os << foo.data; returnos; } public: foo_t(void) : data(newchar[14]) { std::strcpy(data,"Hello, World!"); } ~foo_t(void) {delete[] data; } foo_t(constfoo_t& other); foo_t &operator=(constfoo_t& other); private: char*data; }; foo_t::foo_t(constfoo_t& other) { std::cout <<"call copy constructor!!!"<< std::endl; this->data =newchar[strlen(other.data) + 1]; strcpy(this->data, other.data); } foo_t& foo_t::operator=(constfoo_t& other) { std::cout <<"call the copy assignment operator!!!"<< std::endl; if(this== &other) return*this; this->data =newchar[strlen(other.data) + 1]; strcpy(this->data, other.data); return*this; } intmain() { foo_t foo; std::cout << foo <<'n'; foo_t t(foo); // foo_t t2 = t; foo_t t3; t3 = t; return0; } |
为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔