के रूप में कस्टम डिलीटर के साथ std :: unique_ptr
myClass
है जिसे कभी-कभी उपयोग के आधार पर अतिरिक्त राज्य जानकारी संग्रहीत करने की आवश्यकता होती है। यह आमतौर पर
void*
के साथ किया जाता है, लेकिन मैं सोच रहा था कि क्या मैं
std::unique_ptr<void, void(*)(void*)>
का उपयोग कर सकता हूं ताकि क्लास इंस्टेंस नष्ट होने पर स्मृति स्वचालित रूप से रिलीज़ हो। समस्या यह है कि मुझे अपरिभाषित व्यवहार में एक शून्य * परिणाम हटाने के रूप में एक कस्टम डिलीटर का उपयोग करने की आवश्यकता है।
क्या std::unique_ptr<void, void(*)(void*)>
डिफॉल्ट बनाने का कोई तरीका है, इसलिए मैंने इसे पहले डमी डिलीटर के साथ नहीं बनाया है, फिर जब मैं void*
का उपयोग किसी राज्य संरचना के लिए करता हूं तो वास्तविक डिलीटर सेट करता है? या क्या कक्षा में राज्य की जानकारी स्टोर करने का एक बेहतर तरीका है?
void dummy_deleter(void*) { }
class myClass
{
public:
myClass() : m_extraData(nullptr, &dummy_deleter) { }
// Other functions and members
private:
std::unique_ptr<void, void(*)(void*)> m_extraData;
};
हमारे पास टेम्पलेट्स होने पर 'शून्य' पॉइंटर्स के लिए वास्तव में बहुत अधिक उपयोग नहीं है। –
यह एक [xy समस्या] की तरह लगता है (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)। – Pubby
क्या आप वाकई 'unique_ptr' चाहते हैं, और' shared_ptr' नहीं? –