मैं सी ++ 11 विशेषताओं, विशेष रूप से shared_ptr
के बारे में सीख रहा हूं, और मुझे this
का संदर्भ देने और अन्य वर्गों के संदर्भ के रूप में इसका उपयोग करने में कोई समस्या है।"this" को shared_ptr के रूप में संदर्भित करते हुए?
ऐसा करने का कारण यह है कि मेरे पास Simulation
उदाहरण है जो सिमुलेशन (उदा। Apple
) के अन्य उदाहरणों के आसपास पारित किया गया है ताकि वे स्वयं सिमुलेशन को संशोधित कर सकें, या सिमुलेशन से खुद को हटा सकें।
मेरे अधिक जटिल कोड में मुझे double free
त्रुटि (जब प्रोग्राम मौजूद है) मिलता है, जैसा कि मैं from here समझता हूं कि मुझे एक ही कच्चे ऑब्जेक्ट पर shared_ptr
दो बार नहीं बनाना चाहिए। this
Apple
ऑब्जेक्ट को shared_ptr
के रूप में कैसे पास कर सकता है जब सिमुलेशन क्लास को यह नहीं पता कि this
पहले से ही shared_ptr
है?
मेरे सोचा initialisation बहस में shared_ptr
पारित करने के लिए है, लेकिन है कि अनावश्यक प्रतीत, उदा .:
// The argument is a std::shared_ptr<Simulation>
simulation->initSomethingElse(simulation);
शायद मैं एक असामान्य पैटर्न में इस लागू करने के लिए कोशिश कर रहा हूँ, या हो सकता है मेरी समझ बहुत सही नहीं है? शायद इसके बजाय ऐसा करने का एक अच्छा तरीका है?
#include <memory>
class Simulation;
class Apple {
public:
void init(std::shared_ptr<Simulation> simulation) {
this->simulation = simulation;
};
private:
std::shared_ptr<Simulation> simulation;
};
class Simulation {
public:
void initSomethingElse() {
auto apple = std::shared_ptr<Apple>(new Apple());
// incorrect second reference to the raw pointer
apple->init(std::shared_ptr<Simulation>(this));
};
};
int main() {
auto simulation = std::shared_ptr<Simulation>(new Simulation());
simulation->initSomethingElse();
return 0;
}
आप 'shared_ptr' उदाहरणों को कहां नष्ट कर रहे हैं? अकेले अंतिम वाक्य के लिए –
Dai