मैं लैम्ब्डा के अंदर एक कच्चा सूचक पास करना चाहता हूं, लेकिन अगर मैं लैम्ब्डा नहीं बुलाता हूं, तो मैं इसे लीक नहीं करना चाहता हूं। यह इस तरह दिखता है:मैं C++ 14 में lambda के अंदर std :: unique_ptr क्यों नहीं चला सकता?
void Clean(std::unique_ptr<int>&& list);
void f(int* list) {
thread_pool.Push([list = std::unique_ptr<int>(list) ] {
Clean(std::move(list)); // <-- here is an error.
});
}
मैं बजना 3.7.0 में कोई त्रुटि मिलती है:
error: binding of reference to type 'unique_ptr<[2 * ...]>' to a value of type 'unique_ptr<[2 * ...]>' drops qualifiers
लेकिन मैं पहले स्थान पर किसी भी क्वालिफायर नहीं दिख रहा है, विशेष रूप से गिरा दिया।
इसके अलावा, मुझे मेलिंग सूची पर समान report मिला, लेकिन उत्तर के बिना।
मैं कैसे तो यह संकलित और शब्दों को आशा के अनुरूप काम करता है हो जाता है, मेरे कोड को संशोधित करना चाहिए?
क्या 'साफ()' है? जब मैं क्लैंग पर पुनर्विचार करने की कोशिश करता हूं, मान लीजिए कि 'क्लीन() 'मूल्य से' unique_ptr' लेता है, तो मुझे "त्रुटि मिलती है:' std :: unique_ptr 'के हटाए गए कन्स्ट्रक्टर को कॉल करें, जो अधिक समझ में आता है। –
Barry
@ बैरी I हेवन मूल के बाद किसी भी अन्य त्रुटि की उम्मीद नहीं है। अभी मैं सभी को ठीक करने की कोशिश कर रहा हूं और प्रश्न में कोड अपडेट कर रहा हूं, ताकि मूल त्रुटि केवल एक ही हो। –