2013-09-06 4 views
1

나는 파일 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

:

MyClass<10,int> m2(m1); 

당신이 전화하는거야 기능은 서명이 있습니다. '할당 연산자 '를 정의하고 무슨 일이 일어나는 지보십시오. – lapk

답변

2

당신이 복사 할당 연산자를 호출하고, 복사 생성자를 호출되지 않기 때문에. 복사 생성자 호출은 다음과 같습니다 그것은 호출 할 수 없습니다

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

implicitly defined assignment operator이 대신 호출됩니다. 그것은 memberwise 할당을 수행합니다 (즉,이 경우 아무 것도 효과적이지 않습니다). 따라서 copy-ctor가 호출되지 않습니다. 대신을 시도해보십시오

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

네, 맞습니다! 그것은 지금 작동하고 그것은 또한 꽤 논리적 인 일이 ... – Andry