Говард Хиннант объяснил , что unique_ptr
также может использовать пользовательский тип хранения . В качестве примера он упоминает " общая память ".
Он только дает грубую идею (что хорошо для быстрого вступления). Но может ли кто-нибудь завершить свой пример для «пользовательского типа хранилища» (будь то общая память или нет)?
Для поддержки размещения unique_ptr
в общей памяти пользовательский удалитель может содержать пользовательский тип указателя (обычно это не настоящий указатель в приложениях с общей памятью). Один просто помещает вложенный тип , называемый pointer , который эмулирует поведение указателя в вашем удалителе, общедоступный:
template <class T>
class MyDeleter
{
public:
class pointer
{
public:
friend bool operator==(pointer x, pointer y);
friend bool operator!=(pointer x, pointer y);
// ...
};
void operator()(pointer p);
};
void test()
{
unique_ptr<int, MyDeleter<int> > p;
MyDeleter<int>::pointer p2 = p.get(); // A custom pointer type used for storage
}
Я подозреваю, что // ...
должно быть расширено, и test()
, вероятно, сделает некоторые дополнительные вещи в реальном примере "пользовательского типа хранилища".
Может кто-нибудь сказать мне, где он / она
- фактически уже использовал эту настройку ,
- и в этом контексте ,
- какой какой код настройки , (на
//...
вероятно)
- и как код клиента использует его? (на
test()
вероятно)