Tôi đang cố gắng sử dụng unique_ptr
với một tùy chỉnh deleter cho SDL_Surface
loại. Đây chỉ là một ví dụ sử dụng loại int
, nhưng tôi hy vọng bạn sẽ có được ý tưởng.Bối rối bằng cách sử dụng unique_ptr và một tùy chỉnh deleter
#include <iostream>
#include <functional>
#include <memory>
typedef int SDL_Surface;
SDL_Surface * CreateSurface()
{
SDL_Surface * p = new SDL_Surface;
return p;
}
void FreeSurface(SDL_Surface *p)
{
delete p;
}
int main() {
std::unique_ptr<SDL_Surface, std::function< void (SDL_Surface *) > > uptr_1;
//how to assign a value to uptr_1 and the deleter?
return 0;
}
Là uptr_1
được khai báo chính xác và được khởi tạo thành nullptr
? Nếu vậy, làm thế nào tôi có thể gán con trỏ và chức năng deleter?
Và làm cách nào tôi có thể gói gọn điều này: std::unique_ptr< SDL_Surface, std::function< void (SDL_Surface *) > >
với công cụ không phải lúc nào cũng viết dòng đó trên mỗi SDL_Surface
Tôi muốn, một typedef khác?
Tôi chỉ mới bắt đầu tìm hiểu các tính năng C++ 11 và đây là một tính năng khó đối với tôi.
'std :: unique_ptr> uptr_1 (CreateSurface (), & :: FreeSurface); ' –
' std :: function' là một sự lựa chọn nghèo cho một deleter trong trường hợp chung, bởi vì các hàm tạo của nó có thể ném, nhưng constructor của 'unique_ptr''s deleter không được ném. Tuy nhiên, nếu bạn chỉ sử dụng nó với một con trỏ hàm đơn giản, nó an toàn. –
Liên quan - https://stackoverflow.com/q/24251747/241631 – Praetorian