希望大家喜歡促煮,點(diǎn)贊哦
理解控制拷貝成員和構(gòu)造函數(shù)的一個(gè)好方法是定義一個(gè)簡(jiǎn)單的類,為該類定義這些成員整袁。
為此菠齿,有以下代碼(代碼下載鏈接)
#include <iostream>
#include <vector>
#include <initializer_list>
struct X {
X() { std::cout << "X()構(gòu)造函數(shù)" << std::endl; }
X(const X&) { std::cout << "X(const X&)拷貝構(gòu)造函數(shù)" << std::endl; }
X& operator=(const X&) { std::cout << "X& operator=(const X&)拷貝賦值運(yùn)算符" << std::endl; return *this; }
~X() { std::cout << "~X()折構(gòu)函數(shù)" << std::endl; }
};
void f(const X &rx, X x)
{
std::vector<X> vec;
std::cout << "===========" << std::endl;
vec.reserve(2);
std::cout << "===========" << std::endl;
vec.push_back(rx);
std::cout << "===========" << std::endl;
vec.push_back(x);
std::cout << "===========" << std::endl;
}
int main()
{
X *px = new X;
std::cout << "---------------" << std::endl;
f(*px, *px);
std::cout << "---------------" << std::endl;
delete px;
std::cout << "---------------" << std::endl;
system("pause");
return 0;
}
運(yùn)行結(jié)果如下:
我們會(huì)發(fā)現(xiàn)有在運(yùn)行void f(const X &rx, X x)
后發(fā)生了三次折構(gòu),為什么呢坐昙?
其實(shí)很簡(jiǎn)單绳匀,銷毀之類的操作,是針對(duì)于對(duì)象來說的炸客,這三次分別為形參x疾棵,以及vector被銷毀時(shí)其內(nèi)的兩個(gè)元素被銷毀的折構(gòu)。
我覺得是這樣痹仙,有錯(cuò)誤請(qǐng)指正是尔。
希望大家喜歡,點(diǎn)贊哦