पृष्ठभूमिसमारोह के भीतर आबंटित स्मृति प्रबंधन करने के लिए एक स्मार्ट सूचक का उपयोग करना
अगर मैं एक समारोह foo
था के रूप में
void foo(std::vector<int>& values)
{
values = std::vector<int>(10, 1);
}
इस प्रकार है तो मैं के रूप में
std::vector<int> values;
foo(values);
सूचना यह कह सकते हैं कि प्रारंभिक vector
खाली है, फिर यह foo
फ़ंक्शन के भीतर पॉप्युलेट किया गया है।
मैं अक्सर उदाहरण के लिए इंटरफेस है कि मैं (यानी 3 पार्टी), जैसा कि ऊपर एक ही इरादा नहीं है कि है, लेकिन कच्चे सरणियों का उपयोग कर परिवर्तित नहीं कर सकता के पार चलो,
void foo(int*& values)
{
values = new int[10];
std::fill_n(values, 10, 1);
}
इन के साथ मेरी समस्या यह है कि अब मैं कर रहा हूँ है उस स्मृति के प्रबंधन के लिए जिम्मेदार, उदाहरण के लिए
int* values;
foo(values);
delete[] values;
प्रश्न
वहाँ किसी भी तरह से मैं स्मार्ट संकेत का उपयोग कर सकते मेरे लिए यह स्मृति प्रबंधन करने के लिए है? मैं की तरह
std::unique_ptr<int[]> values;
foo(values.get());
लेकिन एक सूचक एक r-मूल्य है कि get
रिटर्न कुछ करना चाहते हैं, तो मैं गैर स्थिरांक संदर्भ द्वारा इसे पारित नहीं कर सकते।
अगर यह कानूनी है मैं नहीं जानता, लेकिन यह संकलित करता है: http://coliru.stacked-crooked.com/a/860ae38fd2cdb4a2 – NathanOliver