复制构造函数未在模板化类中调用

时间:2013-09-06 07:36:38

标签: c++ g++ copy-constructor

我在文件myclass.hpp中有以下类:

#ifndef MYCLASS_HPP
#define MYCLASS_HPP
#include <cstdlib>
#include <iostream>
template <std::size_t l, typename T>
class MyClass {
public:
  MyClass();
  MyClass(const MyClass<l,T>& other);
};
#include "myclass.tpp"
#endif

伪实现文件myclass.tpp

template <std::size_t l, typename T>
MyClass<l,T>::MyCLass() {
  std::cout << "Ctor" << std::endl;
}
template <std::size_t l, typename T>
MyClass<l,T>::MyCLass(const MyCLass<l,T>& other) {
  std::cout << "COPY Ctor" << std::endl;
}

在我的主文件中,我有:

#include "myclass.hpp"
int main(int argc, char** argv) {
  MyCLass<10,int> m1;
  MyClass<10,int> m2;
  m1 = m2; // <-- HERE
}

不调用复制构造函数。打印输出如下:

  

Ctor

     

CTOR

我做错了什么?三江源

2 个答案:

答案 0 :(得分:2)

因为您没有调用复制构造函数,所以您正在调用复制赋值运算符。复制构造函数调用将是:

MyClass<10,int> m2(m1);

您正在呼叫的功能具有签名:

template <std::size_t l, typename T>
MyClass<l, T>& operator=(const MyClass<l, T>& other);

答案 1 :(得分:1)

而是调用implicitly defined assignment operator。它执行成员分配(即,在这种情况下实际上没有任何内容),因此不会调用copy-ctor。 试试这个:

MyCLass<10,int> m1;
MyClass<10,int> m2 = m1;