, , , ?
, . , , - , . , default_delete - , , , , .
, UB, , .
UB, .
, default_delete<MyUserDefinedType> ( ), .
, , . :
class MyUserDefinedType
{
friend struct std::default_delete<MyUserDefinedType>;
private:
int veryPrivateData;
~MyUserDefinedType() { }
};
namespace std {
template<>
struct default_delete<MyUserDefinedType>
{
constexpr default_delete() noexcept = default;
template <class U> default_delete(const default_delete<U>&) noexcept {}
void operator()(T* pt) const { delete pt; }
void access(MyUserDefinedType& mudt, int i) const
{ mudt.veryPrivateData = i; }
};
}
void somewhere_deep_in_the_code()
{
MyUserDefinedType& myUDT = ;
std::default_delete<MyUserDefinedType>().access(myUDT, 42);
}
- . . - , , .