1개월 전 · Jul 5, 2026 7:24 PM
Why specifying a custom deleter in std::unique_ptr changes its memory size:
- Stateless Struct Deleter:
CPP
struct FreeDeleter { void operator()(void* p) const { std::free(p); } };
std::unique_ptr<int, FreeDeleter> p(ptr);
// sizeof(p) == 8 bytes (Empty Base Optimization / [[no_unique_address]])!- Function Pointer Deleter:
CPP
std::unique_ptr<FILE, decltype(&fclose)> f(fp, &fclose);
// sizeof(f) == 16 bytes! (Stores an extra 8-byte function pointer inside the smart pointer object!)