簡體   English   中英

在這種情況下,如何使用boost的shared_ptr?

[英]How can I use shared_ptr of boost in this situation?

我有2個班級AB。

在A類中,我在B上有一個稱為Bptr的指針。

我在A的構造函數中為Bptr分配內存,並在A的析構函數中釋放Bptr的內存。

class B {
//whatever
public:
    B(int,int);
}

class A {
private:
    B * Bptr;
public:
    A();
}

A::A(){
    Bptr = new B(2,5);
}

A::~A(){
    delete Bptr;
}

如何將Boost集成到代碼中並使用智能指針: boost :: shared_ptr 我的代碼看起來如何?

非常感謝!

問自己的第一個問題:為什么首先要動態分配對象? 您能只用B類型的成員替換指針嗎?

假設有一個很好的理由,那為什么要使用shared_ptr (而不是scoped_ptr或者在現代C ++中是unique_ptr )? 為什么需要共享所有權?

回答完這些問題並確定共享所有權是正確的解決方案后,只需將B*替換為共享指針,在構造函數中對其進行初始化,並去除多余的析構函數(假定不需要其他任何東西)。

class A {
private:
    boost::shared_ptr<B> Bptr;
public:
    A() : Bptr(boost::make_shared<B>(2,5)) {}
};

您可以簡單地使用指針Bptr(new B(2,5))對其進行初始化,但是使用make_shared可以更有效地使用內存,並且(在比這更復雜的情況下)可以更輕松地確保異常安全。

class B {
//whatever
public:
    B(int,int);
}

class A {
private:
    boost::shared_ptr<B> Bptr;
public:
    A();
}

A::A(){
    Bptr = boost::make_shared<B>(2,5);
}

A::~A(){
  // Bptr automatically deleted if this is the only boost::shared_ptr pointing to it
}

盡管您可以簡單地使用new B(2,5)代替boost::make_shared<B> ,但是后者是異常安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM