浅析C++拷贝、赋值与销毁

2016-04-13  本文已影响41人  Gaolex

希望大家喜欢,点赞哦

理解控制拷贝成员和构造函数的一个好方法是定义一个简单的类,为该类定义这些成员。

为此,有以下代码(代码下载链接)

#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被销毁时其内的两个元素被销毁的折构。

我觉得是这样,有错误请指正。
希望大家喜欢,点赞哦

上一篇 下一篇

猜你喜欢

热点阅读