के पते को पार करके एक std :: unique_ptr प्रारंभ करना मैं एक क्लास बना रहा हूं जो कुछ विंडोज एपीआई कोड के साथ इंटरप्ट करता है, अब मुझे शुरू करने वाले पॉइंटर्स में से एक मूल कार्य को कॉल करके किया जाता है जो इसे प्रारंभ करता है।पॉइंटर
मेरे संकेत दिए गए, जो WinAPI Deleter समारोह प्रदान की कॉल एक कस्टम Deleter, साथ प्रकार std::unique_ptr
के हैं लेकिन मैं & init-कार्य करने के लिए ऑपरेटर का पता-के साथ unique_ptr पारित नहीं कर सकते हैं। क्यूं कर?
मैं एक नमूना है कि मेरी समस्या को दर्शाता है बनाया है:
#include <memory>
struct foo
{
int x;
};
struct custom_deleter {};
void init_foo(foo** init)
{
*init = new foo();
}
int main()
{
std::unique_ptr<foo, custom_deleter> foo_ptr;
init_foo(&foo_ptr);
}
संकलक छाल और कहते हैं:
source.cpp: In function 'int main()':
source.cpp:19:21: error: cannot convert 'std::unique_ptr<foo, custom_deleter>*' to 'foo**' for argument '1' to 'void init_foo(foo**)'
तो समाधान 'shared_ptr' या कच्चे संकेत के लिए वापस जाना है? –
और कैसे प्राप्त करें? – ForEveR
@ForEverR: इसके बारे में क्या? यह उस डेटा सदस्य का * मान * देता है, न कि उस डेटा सदस्य के सूचक। –