[英]How can I use shared_ptr of boost in this situation?
我有2個班級A和B。
在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.