का उपयोग कर त्रुटि मैं काफी कोड छोड़ने जा रहा हूं क्योंकि ये कुछ बड़ी वस्तुएं हैं, और मेरा प्रश्न वास्तव में std :: make_shared के संचालन से संबंधित है। मेरे पास नेमस्पेस सिंक में एक ऑब्जेक्ट है जिसे D3D11Shader कहा जाता है। यह एक स्थिर समारोह कहा जाता है,std :: make_shared अमूर्त वर्ग तात्कालिकता
SYNC::D3D11Shader * SYNC::D3D11Shader::CreateInstance(const std::string & s)
जो एक स्ट्रिंग सूचकांक लेने के लिए और समन्वयन से ली गई है कि एक शेडर :: D3D11Shader का एक उदाहरण के लिए सूचक वापस आ जाएगी है। एक बिंदु पर मैंने उन सभी शेडर्स वाले वेक्टर के भीतर इन्हें हटाने के लिए स्मार्ट पॉइंटर्स का उपयोग शुरू किया। हालांकि,
std::shared_ptr<SYNC::D3D11Shader> shaderPtr;
// ... verification of index and other initialization happens here
// so i am unable to initialize it in it's constructor
shaderPtr = std::make_shared<SYNC::D3D11Shader>(SYNC::D3D11Shader::CreateShader(shaderName));
संकलक त्रुटियों कह रही है कि मैं इस लाइन जो एक अमूर्त वर्ग है में D3D11Shader का एक उदाहरण instanciate कोशिश कर रहा हूँ जब मैं यह करने के लिए, जाओ। मैंने सोचा कि सभी make_shared किया गया था std :: shared_ptr का एक उदाहरण लौटा। CreateInstance फ़ंक्शन इस वर्ग का उदाहरण बनाने की कोशिश नहीं करता है, केवल ऑब्जेक्ट्स जो इसे प्राप्त और कार्यान्वित करता है। मुझे इस फ़ंक्शन और स्मार्ट पॉइंटर्स का उपयोग करने से पहले यह त्रुटि नहीं मिल रही थी। क्या किसी को पता है कि यहाँ क्या हो रहा है?
make_shared http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared या http://msdn.microsoft.com/en-us/library/ee410595.aspx –
के दस्तावेज़ों की जांच करें खैर शूट, परिभाषा में महत्वपूर्ण वाक्यांश, "एक वस्तु का निर्माण।" क्या शुरुआतीकरण के बाद किसी पॉइंटर पर साझा_ptr को सेट करने के लिए वैसे भी है? – FatalCatharsis
साझा_प्टर के कन्स्ट्रक्टर का उपयोग सीधे 'shared_ptr ptr (your_pointer_here); ', या' ptr.reset (your_pointer_here);' यदि आपके पास मौजूदा है। –