模板类隐式复制构造函数问题

时间:2010-04-17 01:03:15

标签: templates copy-constructor

单步执行我在gdb中的程序,第108行返回到调用函数,并且不调用类A中的复制构造函数,就像(我认为)它应该:

template <class S> class A{
    //etc...
    A( const A & old ){
        //do stuff...
    }
    //etc...
};

template <class T> class B{
    //etc...
    A<T> ReturnsAnA(){
        A<T> result;
        // do some stuff with result
        return result; //line 108
    }
    //etc...
};

任何提示?我现在已经把头撞到墙上4个小时了,似乎无法想出这里发生的事情。

1 个答案:

答案 0 :(得分:2)

(Named) return value optimization生效。您的复制构造函数将作为优化被删除(标准允许这样做,但会导致不同的行为)。

另见Understanding return value optimization and returning temporaries - C++

(模板与此无关。)