[英]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.