希望大家喜欢,点赞哦
理解控制拷贝成员和构造函数的一个好方法是定义一个简单的类,为该类定义这些成员。
为此,有以下代码(代码下载链接)
#include <iostream>
#include <vector>
#include <initializer_list>
struct X {
X() { std::cout << "X()构造函数" << std::endl; }
X(const X&) { std::cout << "X(const X&)拷贝构造函数" << std::endl; }
X& operator=(const X&) { std::cout << "X& operator=(const X&)拷贝赋值运算符" << std::endl; return *this; }
~X() { std::cout << "~X()折构函数" << 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;
}
运行结果如下:
运行结果我们会发现有在运行void f(const X &rx, X x)
后发生了三次折构,为什么呢?
其实很简单,销毁之类的操作,是针对于对象来说的,这三次分别为形参x,以及vector被销毁时其内的两个元素被销毁的折构。
我觉得是这样,有错误请指正。
希望大家喜欢,点赞哦
网友评论