देखो:सी ++ std :: सूची :: स्पष्ट() विनाशकों को क्यों नहीं बुला रहा है? इस कोड में
class test
{
public:
test() { cout << "Constructor" << endl; };
virtual ~test() { cout << "Destructor" << endl; };
};
int main(int argc, char* argv[])
{
test* t = new test();
delete(t);
list<test*> l;
l.push_back(DNEW test());
cout << l.size() << endl;
l.clear();
cout << l.size() << endl;
}
और फिर, इस उत्पादन को देखो:
Constructor
Destructor
Contructor
1
0
सवाल यह है: क्यों l.clear()
को नहीं बुलाया सूची तत्व की नाशक है?
अच्छा, मैंने यही सोचा लेकिन मैं इसकी पुष्टि करना चाहता था। – danikaze
या Boost.PointerContainer का ['ptr_list'] (http://www.boost.org/doc/libs/release/libs/ptr_container/doc/ptr_list.html) का उपयोग करें। –
हाँ, मैं ज्यादातर चीजों के लिए स्मार्टपॉइंटर्स का उपयोग करता हूं लेकिन कभी-कभी कच्चे पॉइंटर्स बेहतर होते हैं। बात यह है कि मैंने सोचा कि अगर मेरे पास पॉइंटर पी है, तो हटाएं (पी) कहा जाता था ... लेकिन अब यह जानना ठीक है। मैं कच्चे पॉइंटर्स मुक्त कर दूंगा। – danikaze