का कन्स्ट्रक्टर कॉपी करें मैंने पढ़ा है कि टेम्पलेट कॉपी-कॉन कभी भी डिफ़ॉल्ट प्रतिलिपि निर्माता नहीं है, और टेम्पलेट असाइनमेंट-ओप कभी कॉपी कॉपी ऑपरेटर नहीं है।टेम्पलेट वर्ग
मैं नहीं समझ सकता है क्यों इस प्रतिबंध की जरूरत है और सीधे ideone और वापसी एक test program लेकिन यहाँ कॉपी निर्माता पर बुलाया जाता है कभी नहीं आगे googling मैं templatized निर्माता में आए और कहा कि कोशिश की करने के लिए ऑनलाइन किया गया है लेकिन अभी भी यह कॉल निर्माता नकल कभी नहीं ।
#include <iostream>
using namespace std;
template <typename T> class tt
{
public :
tt()
{
std::cout << std::endl << " CONSTRUCTOR" << std::endl;
}
template <typename U> const tt<T>& operator=(const tt<U>& that){std::cout << std::endl << " OPERATOR" << std::endl;}
template <typename U> tt(const tt<U>& that)
{
std::cout << std::endl << " COPY CONSTRUCTOR" << std::endl;
}
};
tt<int> test(void)
{
std::cout << std::endl << " INSIDE " << std::endl; tt<int> a; return a;
}
int main() {
// your code goes here
tt<int> a ; a = test();
return 0;
}
क्या कोई मुझे इस प्रतिबंध को डालने और टेम्पलेट वर्ग की प्रतिलिपि बनाने के तरीके के बारे में बता सकता है।
धन्यवाद
[कॉपी-एलिशन।] (Http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) – 0x499602D2
कोई "डिफ़ॉल्ट प्रति कन्स्ट्रक्टर" नहीं है। केवल * एक * कॉपी कन्स्ट्रक्टर है। एक टेम्पलेट कभी नहीं है। –
मैंने कोड संपादित किया और इसे आदर्श में चलाया लेकिन अभी भी कन्स्ट्रक्टर को कॉपी नहीं किया गया है। लेकिन मैं इस प्रतिबंध के पीछे कारण समझने में भी सक्षम नहीं हूं – anonymous