我在文件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
我做错了什么?三江源
答案 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;