C++Primer13.1.3節(jié)練習(xí)-創(chuàng)新互聯(lián)

練習(xí)13.9:

創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了成都做網(wǎng)站、網(wǎng)站設(shè)計服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

析構(gòu)函數(shù)執(zhí)行與構(gòu)造函數(shù)相反的操作:構(gòu)造函數(shù)初始化對象的非static數(shù)據(jù)成員,還可能做一些其他工作;析構(gòu)函數(shù)釋放對象使用的資源,并銷毀對象的非static數(shù)據(jù)成員

析構(gòu)函數(shù)是類的成員函數(shù),名字由波浪線接類名構(gòu)成,它沒有返回值,不接受參數(shù)

類似拷貝構(gòu)造函數(shù)和拷貝賦值運(yùn)算符,對于某些類,合成析構(gòu)函數(shù)用來阻止該類型的對象被銷毀,如果不是這種情況,合成析構(gòu)函數(shù)的函數(shù)體就為空

當(dāng)一個類未定義自己的析構(gòu)函數(shù)時,編譯器會為它定義一個合成析構(gòu)函數(shù)

練習(xí)13.10:

StrBlob類和StrBlobPtr類沒有定義析構(gòu)函數(shù),編譯器會為這兩個類定義合成析構(gòu)函數(shù)。

StrBlob對象銷毀時,在合成析構(gòu)函數(shù)的空函數(shù)體執(zhí)行完畢后,會進(jìn)行隱含析構(gòu)階段,此時會將數(shù)據(jù)成員data銷毀,調(diào)用shared_ptr的析構(gòu)函數(shù)。引用計數(shù)減1,減為0后釋放內(nèi)存

StrBlobPtr對象銷毀時,在合成析構(gòu)函數(shù)的空函數(shù)體執(zhí)行完畢后,會進(jìn)行隱含析構(gòu)階段,此時會將數(shù)據(jù)成員wptr和curr銷毀,調(diào)用weak_ptr的析構(gòu)函數(shù)銷毀wptr。引用計數(shù)不變,curr是內(nèi)置數(shù)據(jù)類型,直接銷毀

練習(xí)13.11:

#include#includeusing namespace std;

class HasPtr
{
public:
	HasPtr(const std::string& s = std::string()):
		ps(new std::string(s)),i(0) { }
	//拷貝構(gòu)造函數(shù)
	HasPtr(const HasPtr& hp): ps(new std::string(*hp.ps)),i(hp.i) { }
	//拷貝賦值運(yùn)算符
	HasPtr& operator=(const HasPtr&);
	//析構(gòu)函數(shù)
	~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;
}

練習(xí)13.12:

會發(fā)生三次析構(gòu)操作

函數(shù)執(zhí)行結(jié)束時,臨時變量item1和item2被銷毀,執(zhí)行析構(gòu)函數(shù)

函數(shù)結(jié)束后,非引用形參accum被銷毀,執(zhí)行析構(gòu)函數(shù)

練習(xí)13.13:

#include#includeusing namespace std;
#includeclass HasPtr
{
public:
	HasPtr(const std::string& s = std::string()):
		ps(new std::string(s)),i(0) { }
	//拷貝構(gòu)造函數(shù)
	HasPtr(const HasPtr& hp): ps(new std::string(*hp.ps)),i(hp.i) { }
	//拷貝賦值運(yùn)算符
	HasPtr& operator=(const HasPtr&);
	//析構(gòu)函數(shù)
	~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 {
	//默認(rèn)構(gòu)造
	X() { std::cout<< "X()"<< std::endl; }
	//拷貝構(gòu)造
	X(const X&) { std::cout<< "X(const X&)"<< std::endl; }
	//拷貝賦值運(yùn)算符
	X& operator=(const X& x)
	{
		std::cout<< "X& operator=(const X& x)"<< std::endl;
		return *this;
	}
	//析構(gòu)函數(shù)
	~X() { std::cout<< "~X()"<< std::endl; }
};

void func(X x)
{

}


int main()
{
	//創(chuàng)建X對象
	X x;
	//非引用參數(shù)傳遞
	func(x);
	//引用參數(shù)傳遞
	X x1(x);
	//動態(tài)分配
	X* x2 = new X;
	//存放于容器
	vectorv;
	v.push_back(x);

	system("pause");
	return 0;
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

新聞標(biāo)題:C++Primer13.1.3節(jié)練習(xí)-創(chuàng)新互聯(lián)
本文鏈接:http://bm7419.com/article4/gooie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、Google、虛擬主機(jī)、商城網(wǎng)站、響應(yīng)式網(wǎng)站、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)