Когда пишешь на С++, каждый день открываешь для себя что-то новое. Надоело держать это в себе. Хочется поделиться открытиями с миром :)
Сегодня я открыл для себя 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
Комментариев нет:
Отправить комментарий