2017-07-17 90 views

回答

4

其中一種情況是std::make_shared不支持指定自定義刪除程序。

std::shared_ptr構造函數不同,std::make_shared不允許定製刪除程序。

您只能使用構造函數std::shared_ptr(例如,

std::shared_ptr<Foo> sh5(new Foo, [](auto p) { 
    std::cout << "Call delete from lambda...\n"; 
    delete p; 
}); 

的另一個問題是,正如聯後解釋的,std::make_shared僅執行一個分配兩者的控制塊和指向的對象。這意味着在對象被銷燬後,它佔用的內存可能不會立即釋放。這可能會導致一些內存使用問題。

2

如果使用私有構造函數聲明類(單例模式),則不能使用make_shared來構造它,但可以使用shared_ptr強制轉換。

相關問題