代码之家  ›  专栏  ›  技术社区  ›  Nate

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

  •  0
  • Nate  · 技术社区  · 15 年前

    在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 回复  |  直到 15 年前
        1
  •  2
  •   Community CDub    8 年前

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

    也见 Understanding return value optimization and returning temporaries - C++ .

    (模板与此无关。)