Tôi đang tạo một lớp liên kết với một số mã API Windows, bây giờ một trong các con trỏ tôi phải khởi tạo được thực hiện bằng cách gọi một hàm gốc khởi tạo nó.Khởi tạo một std :: unique_ptr bằng cách chuyển địa chỉ của con trỏ
Con trỏ của tôi là loại std::unique_ptr
với một dấu tùy chỉnh, gọi hàm WinAPI deleter được cung cấp, tuy nhiên tôi không thể chuyển unique_ptr với toán tử địa chỉ & cho hàm init. Tại sao?
Tôi đã tạo ra một mẫu thể hiện vấn đề của tôi:
#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);
}
Tiếng sủa biên dịch và nói:
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**)'
Vì vậy, giải pháp là 'shared_ptr' hoặc quay trở lại con trỏ nguyên? –
Và làm thế nào về nhận được? – ForEveR
@ForEverR: điều gì về nó? Nó trả về giá trị * của thành viên dữ liệu đó, không phải là con trỏ tới thành viên dữ liệu đó. –