Ví dụ này biên dịch và chạy tốt với gcc 4.8.3:constructor unique_ptr với deleter tùy chỉnh sẽ bị xóa
#include <memory>
#include <functional>
#include <iostream>
int main() {
auto str = new const char[6]{'h', 'e', 'l', 'l', 'o', '\0'};
std::unique_ptr<const char[], std::function<void(const char *)>> u_ptr(str, [](const char *s){ delete[] s; });
std::cout << u_ptr.get() << std::endl;
}
Nhưng khi tôi thử nó với Visual Studio Professional 2013 nó không biên dịch (than phiền về một chức năng xóa). Đây có phải là chưa thể với Visual Studio 2013? Hay mã mẫu của tôi sai và gcc bỏ qua lỗi của tôi?
Lỗi là:
main.cpp (8): lỗi C2280: 'std :: unique_ptr> :: unique_ptr> (_ Ptr2, _Dx2): cố gắng tham khảo một chức năng xóa với [ _Ptr2 = const char *, _Dx2 = chính :: ] C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ INCLUDE \ memory (16 16): xem khai báo 'std :: unique_ptr>: : unique_ptr '
Làm việc với tiếng kêu. –
Nên có câu hỏi thường gặp về "tại sao lại sử dụng' std :: function' như một dấu phân cách 'unique_ptr' một ý tưởng khủng khiếp?" –
[OT]: khi bạn không nắm bắt bất cứ điều gì, bạn có thể bỏ qua không cần thiết '=' trong '[=]'. – Jarod42