繁体   English   中英

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

[英]Copy constructor not called in templated class

我在文件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

我究竟做错了什么? 谢谢

因为您没有调用副本构造函数,所以您正在调用副本分配运算符。 复制构造函数调用为:

MyClass<10,int> m2(m1);

您正在调用的函数具有签名:

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

而是调用一个隐式定义的赋值运算符 它执行成员分配(在这种情况下实际上不执行任何操作),因此不会调用copy-ctor。 尝试以下方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM