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

  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • Joshua Bane

    Joshua Bane

    24 Temmuz 2007
  • MovieZoneET

    MovieZoneET

    22 Aralık 2009