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

  • Charles Griffin Gibson

    Charles Grif

    26 NİSAN 2006
  • theKGB65

    theKGB65

    24 Aralık 2007
  • tychoadragmire

    tychoadragmi

    20 Mart 2006