美文网首页
浅析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++拷贝、赋值与销毁

    希望大家喜欢,点赞哦 理解控制拷贝成员和构造函数的一个好方法是定义一个简单的类,为该类定义这些成员。为此,有以下代...

  • 浅析c++三大函数--GeekBand

    浅析c++ 三大函数 三大函数的特殊性 c++三大函数指的是拷贝构造、拷贝赋值、析构函数。这3个函数比较特殊: 一...

  • C++拷贝控制

    前言 C++通过在类中定义几个成员函数来控制的对象的拷贝,移动,赋值和销毁,分别如下: 拷贝构造函数和移动构造函数...

  • C++ 拷贝控制(二) — 移动构造函数和移动赋值运算符

    相关文章: C++ 拷贝控制(一) — 析构函数、拷贝构造函数与拷贝赋值函数 C++ 引用类型 — 左值引用、常引...

  • 13拷贝控制

    13拷贝控制 13.1拷贝、赋值与销毁 13.1.1拷贝构造函数 拷贝构造函数的第一个参数必须是引用类型。 使用拷...

  • 全面梳理 C++ 拷贝构造与赋值运算符重载(operator=)

    本文全面梳理 C++ 的拷贝构造与赋值运算符重载(operator=) 默认拷贝构造函数和赋值运算符 在默认情况下...

  • [C++ Primer Note12] 拷贝,赋值与销毁

    当定义一个类时,我们显式地或隐式地制定在此类型的对象拷贝,移动,赋值和销毁时做什么。一个类通过五种特殊的成员函数来...

  • c++学习笔记2(GeekBand)

    拷贝构造、拷贝赋值和析构 c++中有Big Three三个特殊的函数,他们就是拷贝构造函数,拷贝赋值函数和析构函数...

  • C++学习日志(2)

    本内容源于geekband c++ 一.拷贝构造,拷贝赋值,析构 1、用于有指针成员情况 2、拷贝构造 Strin...

  • 13-拷贝控制

    13.1 拷贝,赋值与销毁 以上这些操作,必须明白定义与不定义会对类的操作产生何种影响,变编译器定义的合成版本未必...

网友评论

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

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