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构造。

  • 相关阅读:
    BZOJ 2527 Meteors 整体二分
    BZOJ 1176: [Balkan2007]Mokia
    DP杂题2
    点分治
    一些图论模板
    一些字符串的题
    斐波那契+线段树
    BZOJ 2957楼房重建
    POJ
    BZOJ 2002 弹飞绵羊
  • 原文地址:https://www.cnblogs.com/silyvin/p/9106881.html
Copyright © 2011-2022 走看看