में स्मार्ट पॉइंटर्स का उपयोग करके मैंने एक फ़ंक्शन लिखा है जो फ़ाइल से बाइट लोड करता है और एक फ़ाइलडेटा स्ट्रक्चर देता है जिसमें बाइट बफर और बफर की लंबाई होती है।संरचना या कक्षा
मैं चाहता हूं कि बफर को जितना जल्दी उपभोग किया जाए और स्कोप से बाहर फेंक दिया जाए।
मुझे विभिन्न कास्टिंग त्रुटियों के कारण संकलन करने में समस्या हो रही है। साथ ही, मुझे यकीन नहीं है कि बफर को कॉपी करने के बजाए सही ढंग से स्थानांतरित किया जा रहा है या नहीं। मुझे फ़ाइलडेटा स्ट्रक्चर की प्रतिलिपि नहीं है, क्योंकि यह शायद 16 बाइट्स है।
सामान्य रूप से, आप कक्षा पॉइंटर्स के रूप में स्मार्ट पॉइंटर्स का उपयोग कैसे करते हैं? क्या वह कुछ भी है जो आप करेंगे?
यह एक घबराहट सवाल है, मुझे पता है, लेकिन चूंकि मुझे सामान्य रूप से स्मार्ट पॉइंटर्स के साथ कुछ वैचारिक कठिनाइयों का सामना करना पड़ रहा है, इसलिए मुझे आशा है कि यह उदाहरण मुझे सही दिशा में मदद करेगा।
यहाँ मैं अब तक क्या मिल गया है:
struct FileData
{
unique_ptr<char[]> buf;
unsigned int len;
};
FileData LoadFile(string filename)
{
ifstream str;
str.open(filename, ios::binary);
str.seekg(0, ios::end);
auto len = str.tellg();
str.seekg(0, ios::beg);
char* buf = new char[len];
str.read(buf, len);
str.close();
FileData d = { unique_ptr<char[]>(buf), len };
return d;
}
संपादित करें: कुछ लोगों के बाद से, त्रुटि संदेश है कि मैं इस वर्तमान कोड के साथ मिल के बारे में उत्सुक हैं यहाँ यह है:
error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
आपकी समस्या यह है कि आप त्रुटि संदेशों के बारे में कोई विशिष्ट विवरण नहीं देते हैं। पृथ्वी पर हम कैसे संभवतः उन्हें पहचान सकते हैं? – Puppy
@DeadMG मुझे लगता है कि यह स्पष्ट होगा कि कोड के साथ समस्याएं हैं, क्योंकि मैंने यह इंगित किया था कि मुझे यकीन नहीं है कि यह स्मार्ट पॉइंटर्स का उपयोग करने और अर्थशास्त्र को स्थानांतरित करने का सही तरीका है। मैं कोड संकलन से अधिक करना चाहता हूँ; मैं इसे सही और मूर्खतापूर्ण बनाना चाहता हूं। फिर भी, मैंने त्रुटि संदेश के साथ प्रश्न अद्यतन किया है। –
आपको जो त्रुटि मिल रही है वह इसलिए है क्योंकि आप एक unique_ptr की प्रतिलिपि बनाने का प्रयास कर रहे थे, आपको std :: move का उपयोग करना होगा। आप एक साझा_पीटीआर का इस्तेमाल कर सकते थे और अपना खुद का डीलोकेटर घोषित कर सकते थे, लेकिन वेक्टर समाधान बहुत साफ है। – pstrjds