使用來自boost::asio
的異步I/O操作我經常需要共享指針(回調中使用enable_shared_from_this
和shared_from_this
)以避免過早刪除對象。 我認爲它可以通過保持在課堂上unique_ptr
或只是對象(所有權)(作爲成員)異步I/O操作 - 避免刪除對象的正確方法
例如進行: 只有foo
方法使用sender
。
1日(流行的解決方案):
class C {
public:
void foo
{
std::shared_ptr<Sender> sender = std::make_shared<Sender>();
sender->send();
// class Sender use async_write
// inheritance: enable_shared_from_this
// callback in async operation created with argument shared_from_this
}
};
爲什麼沒有人用這個解決方案(?):
class D {
public:
void foo
{
sender.reset(new Sender);
sender->send();
}
private:
std::unique_ptr<Sender> sender;
};
我知道,發件人將不會被刪除早期到。我沒有shared_ptrs。我認爲避免它們是很好的,因爲如果發件人類中的回調也使用異步操作,我需要另一個共享指針等。我認爲D類閱讀更友好。 但我不知道它是否是一種很好的風格......我總是在網上看到shared_ptrs的解決方案。
您使用了以錯誤方式共享的make。 – mustafagonul
在這種情況下,您爲什麼認爲避免'shared_ptr'是好事? –