SORU
26 EYLÜL 2008, Cuma


Boost::shared_ptr bunu almak için

Benim kod boost:shared_ptr geniş kullanımı yapıyorum. Aslında, öbek üzerinde ayrılmış olan nesnelerin en shared_ptr tarafından düzenleniyor. Ne yazık ki bu shared_ptr alan bir işlev içine this geçiremiyorum anlamına gelir. Bu kodu göz önünde bulundurun:

void bar(boost::shared_ptr<Foo> pFoo)
{
    ...
}

void Foo::someFunction()
{
    bar(this);
}

İki sorunumuz var. İlk olarak, bu* 7 *T* kurucu açık olduğu için derleme olmaz. Eğer bar(boost::shared_ptr<Foo>(this)) ile inşa etmeye zorlamak ikincisi, sonunda çift silme götürecek bir nesne için ikinci bir işaretçi paylaşılan oluşturduk.

Bu benim soruma geçeyim: bu nesneler bir içinde bir yöntem var mı bildiğiniz varolan paylaşılan işaretçiyi bir kopyasını almak için herhangi bir standart şablon var mı? Olur müdahaleci başvuru tek seçeneğim burada sayım kullanarak?

CEVAP
26 EYLÜL 2008, Cuma


enable_shared_from_this kaynaklanıyor olabilir ve daha sonra kullanabilirsiniz "() shared_from_this" "bu kendi kendine paylaşılan bir işaretçi spawn" nesne yerine.

Bağlantı örneği:

#include <boost/enable_shared_from_this.hpp>

class Y: public boost::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
}

Bir üye iş parçacığı yumurtlama artırmak için işlev zaman iyi bir fikirdir::shared_from_this bağlamak() bunun yerine. Nesne serbest olmadığından emin olun.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012
  • Plugable

    Plugable

    19 Mayıs 2010