美文网首页
浅析C++拷贝、赋值与销毁

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

作者: Gaolex | 来源:发表于2016-04-13 18:27 被阅读41次

    希望大家喜欢,点赞哦

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

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

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

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

    相关文章

      网友评论

          本文标题:浅析C++拷贝、赋值与销毁

          本文链接:https://www.haomeiwen.com/subject/xriwlttx.html