zoukankan      html  css  js  c++  java
  • vector的push_back对于拷贝构造和赋值操作的调用

    http://blog.csdn.net/silyvin/article/details/8985323

    对应与CArray,补充一个vector的测试。


    class A
    {
    	int *m_a;
    	int bb;
    private:
    	A();
    public:
    
    	A(int n)
    	{
    		m_a = new int;
    		*m_a = n;
    	}
    	A(A const & _a)
    	{
    		m_a = 0;
    		*this = _a;
    	}
    	~A()
    	{
    		delete m_a;
    	}
    	A &operator=(A const &_a)
    	{
    		if(this == &_a) return *this;
    		if(m_a) delete m_a;	
    		m_a = new int;
    		*m_a = *_a.m_a;
    		return *this;
    	}
    };

    	vector<A> arr;
    	A a(1);   
    	arr.push_back(a);
    	int fenge = 10;
    	arr.erase(arr.begin());
    	fenge = 9;

    push_back时生成对象:

    0x0012fb48

    0x003ba320

    两次调用 copy构造,

    然后删除第一个临时对象0x0012fb48


    erase时调用第二个对象,也就是在容器中对象的析构函数。


    如果将vector换成list,则push_back时仅调用一次copy构造。

  • 相关阅读:
    smarty基础
    smarty变量
    Google的Python代码格式化工具YAPF详解
    性能监控工具YourKit
    Scala学习笔记2
    Scala介绍
    线段树
    字符串分割方法
    Trie树
    Scala 学习笔记
  • 原文地址:https://www.cnblogs.com/silyvin/p/9106881.html
Copyright © 2011-2022 走看看