folowing कोड से पता चलता एक आउटपुट की उम्मीद नहीं:एसटीएल वेक्टर एक नहीं आवंटित वस्तु का एक नाशक बुला है?
class test
{
public:
test()
{
std::cout << "Created" << (long)this << std::endl;
}
~test()
{
std::cout << "Destroyed" << (long)this << std::endl;
}
};
int main(int argc, char** argv)
{
std::vector<test> v;
test t;
v.push_back(t);
return EXIT_SUCCESS;
}
जब निष्पादित यह पता चलता है:
Created-1077942161
Destroyed-1077942161
Destroyed674242816
मुझे लगता है कि दूसरी "नष्ट" उत्पादन वहाँ नहीं होना चाहिए। जब मैं वेक्टर का उपयोग नहीं करता हूं तो परिणाम एक निर्मित और एक नष्ट लाइन के रूप में अपेक्षित है। क्या यह व्यवहार सामान्य है?
(यह एक FreeBSD सिस्टम पर जीसीसी के साथ संकलित किया गया है)
+1 [एसएससीसीई] (http://sscce.org/) – Flexo
के लिए +1 पॉइंटर्स प्रिंट करने के लिए पॉइंटर को डालना सर्वोत्तम है: 'std :: cout << (शून्य *) यह << std :: endl ; '। –
इसके अलावा लौटने 'EXIT_SUCCESS' वैकल्पिक है। आप रिटर्न वैल्यू को 'मुख्य' में छोड़ सकते हैं, यह '0' लौटाएगा (जो आपके प्लेटफ़ॉर्म के लिए" सामान्य समाप्ति "का मतलब है) –