扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
练习13.9:
创新互联凭借在网站建设、网站推广领域领先的技术能力和多年的行业经验,为客户提供超值的营销型网站建设服务,我们始终认为:好的营销型网站就是好的业务员。我们已成功为企业单位、个人等客户提供了成都做网站、网站设计服务,以良好的商业信誉,完善的服务及深厚的技术力量处于同行领先地位。析构函数执行与构造函数相反的操作:构造函数初始化对象的非static数据成员,还可能做一些其他工作;析构函数释放对象使用的资源,并销毁对象的非static数据成员
析构函数是类的成员函数,名字由波浪线接类名构成,它没有返回值,不接受参数
类似拷贝构造函数和拷贝赋值运算符,对于某些类,合成析构函数用来阻止该类型的对象被销毁,如果不是这种情况,合成析构函数的函数体就为空
当一个类未定义自己的析构函数时,编译器会为它定义一个合成析构函数
练习13.10:
StrBlob类和StrBlobPtr类没有定义析构函数,编译器会为这两个类定义合成析构函数。
StrBlob对象销毁时,在合成析构函数的空函数体执行完毕后,会进行隐含析构阶段,此时会将数据成员data销毁,调用shared_ptr的析构函数。引用计数减1,减为0后释放内存
StrBlobPtr对象销毁时,在合成析构函数的空函数体执行完毕后,会进行隐含析构阶段,此时会将数据成员wptr和curr销毁,调用weak_ptr的析构函数销毁wptr。引用计数不变,curr是内置数据类型,直接销毁
练习13.11:
#include#includeusing namespace std;
class HasPtr
{
public:
HasPtr(const std::string& s = std::string()):
ps(new std::string(s)),i(0) { }
//拷贝构造函数
HasPtr(const HasPtr& hp): ps(new std::string(*hp.ps)),i(hp.i) { }
//拷贝赋值运算符
HasPtr& operator=(const HasPtr&);
//析构函数
~HasPtr() { }
private:
std::string* ps;
int i;
};
HasPtr& HasPtr::operator=(const HasPtr& ptr)
{
delete ps;
ps = new string(*ptr.ps);
i = ptr.i;
return *this;
}
练习13.12:
会发生三次析构操作
函数执行结束时,临时变量item1和item2被销毁,执行析构函数
函数结束后,非引用形参accum被销毁,执行析构函数
练习13.13:
#include#includeusing namespace std;
#includeclass HasPtr
{
public:
HasPtr(const std::string& s = std::string()):
ps(new std::string(s)),i(0) { }
//拷贝构造函数
HasPtr(const HasPtr& hp): ps(new std::string(*hp.ps)),i(hp.i) { }
//拷贝赋值运算符
HasPtr& operator=(const HasPtr&);
//析构函数
~HasPtr() { }
private:
std::string* ps;
int i;
};
HasPtr& HasPtr::operator=(const HasPtr& ptr)
{
delete ps;
ps = new string(*ptr.ps);
i = ptr.i;
return *this;
}
struct X {
//默认构造
X() { std::cout<< "X()"<< std::endl; }
//拷贝构造
X(const X&) { std::cout<< "X(const X&)"<< std::endl; }
//拷贝赋值运算符
X& operator=(const X& x)
{
std::cout<< "X& operator=(const X& x)"<< std::endl;
return *this;
}
//析构函数
~X() { std::cout<< "~X()"<< std::endl; }
};
void func(X x)
{
}
int main()
{
//创建X对象
X x;
//非引用参数传递
func(x);
//引用参数传递
X x1(x);
//动态分配
X* x2 = new X;
//存放于容器
vectorv;
v.push_back(x);
system("pause");
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流