Какова полноценность 'enable_shared_from_this'?

Попробуйте это:

...
<span ng-bind-html="'FORM.TRANSLATION_TOKEN_' +$index | translate"></span>
...
332
задан Terry Jan Reedy 3 December 2016 в 09:02
поделиться

1 ответ

Это позволяет Вам получить допустимое shared_ptr экземпляр к this, когда все, что Вы имеете, this. Без него у Вас не было бы способа получить a shared_ptr кому: this, если у Вас уже не было того как у участника. Этот пример из документации повышения для enable_shared_from_this:

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_from_this();
    }
}

int main()
{
    shared_ptr<Y> p(new Y);
    shared_ptr<Y> q = p->f();
    assert(p == q);
    assert(!(p < q || q < p)); // p and q must share ownership
}

Метод f() возвращает допустимое shared_ptr, даже при том, что это не имело никакого членского экземпляра. Обратите внимание, что Вы не можете просто сделать этого:

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_ptr<Y>(this);
    }
}

Общий указатель, который это возвратило, будет иметь другой подсчет ссылок от "надлежащего", и один из них закончит тем, что терял и содержал повисшую ссылку, когда объект будет удален.

enable_shared_from_this стал частью C++ 11 стандартов. Можно также получить его оттуда, а также от повышения.

347
ответ дан brooksrelyt 23 November 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: