вторник, 7 июня 2016 г.

std::shared_ptr aliasing constructor

Когда пишешь на С++, каждый день открываешь для себя что-то новое. Надоело держать это в себе. Хочется поделиться открытиями с миром :) Сегодня я открыл для себя std::shared_ptr aliasing constructor. Итак, пример кода (взят из книги The C++ Std. Library - Tutorial and Ref. 2nd ed):
struct X {
    int a;
};
shared_ptr px(new X);
shared_ptr pi(px, &px->a);  // здесь мы в действительности создаем шаред-пойнтер на экземпляр X,
                                 // но декорируем его как указатель на поле объекта
Это, конечно же, дает плюс-плюс несколько способов выстрелить себе в ногу. Например, так (пример из той же книги):
shared_ptr sp1(new X);
shared_ptr sp2(sp1, new X); // ERROR: delete for this X will never be called

sp1.reset();                   // deletes first X; makes sp1 empty
shared_ptr sp3(sp1,new X);  // use_count()==0, but get()!=nullptr

Комментариев нет:

Отправить комментарий