zoukankan      html  css  js  c++  java
  • vector的push_back操作中关于构造函数析构函数的调用

    向标准库对象中添加内容是拷贝一份到标准库对象中,并不调用相应的构造函数吗?甚至从一个标准库对象复制给另外一个标准库对象,也不会调用到相应的构造函数。但是在删除该标准库对象时却又调用了相应的析构函数来析构标准库对象中的内容。在向vector中push_back一个对象为何会析构之前的所有对象?

     1 #include <iostream>
     2 #include "windows.h"
     3 #include <atlstr.h>
     4 #include <vector>
     5 using namespace std;
     6 
     7 class TreeNode{
     8 public:
     9     TreeNode(int i){
    10         this->i = i;
    11         CString strTemp =TEXT("");
    12         strTemp.Format(TEXT("construct %d\n"), this->i);
    13         OutputDebugString(strTemp); }
    14     ~TreeNode(){
    15         CString strTemp =TEXT("");
    16         strTemp.Format(TEXT("destruct %d\n"), this->i);
    17         OutputDebugString(strTemp);}
    18 private:
    19     int i;
    20     static int si;
    21 };
    22 
    23 void show(vector<TreeNode> &tree)
    24 {
    25     vector<TreeNode> node = tree;
    26 }
    27 
    28 void main(){
    29     vector<TreeNode> vecNode;
    30     TreeNode *node1 = new TreeNode(1);    // construct 1
    31     vecNode.push_back(*node1);
    32     TreeNode *node2= new TreeNode(2);        // construct 2
    33     vecNode.push_back(*node2);                    // destruct 1
    34     TreeNode *node3= new TreeNode(3);        // construct 3
    35     vecNode.push_back(*node3);                    // destruct 1和destruct 2
    36     show(vecNode);                        // destruct 1和destruct 2和destruct 3
    37     vecNode.pop_back();        // destruct 3
    38     delete node1;    // destruct 1
    39     delete node2;    // destruct 3
    40     delete node3;    // destruct 3
    41 }    // destruct 1和destruct 2

     搜索一番这里给出了第一个问题的答案:原来会调用拷贝构造函数来拷贝。

    第二个问题也得到了答案这里:vector最开始预留了1个空间的位置,当用完这1个后会自动产生2个空间,这样不断的翻倍扩大。因此当扩大空间的时候就需要把之前小空间里的内容复制到新的空间中也就会调用到拷贝构造来拷贝到新空间,就空间里的内容也就需要调用析构来析构掉。

  • 相关阅读:
    Android添加横线和竖线分割界面
    ViewPager + Fragment实现滑动标签页
    fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .
    Android开发之ViewPager实现轮播图(轮播广告)效果的自定义View
    Android SDK快速下载
    Codeforces Round #256 (Div. 2) D. Multiplication Table
    UITabBarControler解决旋转问题
    SQL Server 板机
    nested push animation can result in corrupted navigation bar
    10.树和树店
  • 原文地址:https://www.cnblogs.com/wnarutou/p/3132711.html
Copyright © 2011-2022 走看看