我有問題實現像下面這樣的結構。這個想法是,我在某個頭文件中定義了一個實用函數,它分配了某種資源。爲了減輕客戶自己解放它的必要性,我想將它包裝成一個智能指針。 不幸的是,我不知何故需要刪除類型的客戶端,並有麻煩轉發 - 適當地聲明它。我現在的解決方案看起來像這樣,導致多個定義錯誤,因爲刪除程序是重新定義的,每增加一個包含utility.h如何轉發聲明自定義unique_ptr
這是我正在尋找的優雅解決方案嗎?
// utilities.h
namespace foo
{
auto del = [](MyResource* res) { Deallocate(res); };
std::unique_ptr<MyResource, decltype(del)> getResource();
}
// utilities.cpp
namespace foo
{
std::unique_ptr<MyResource, decltype(foo::del)> getResource()
{
return std::unique_ptr<MyResource, decltype(foo::del)>(Allocate(), del);
}
}
使刪除器成爲一個*函數*而不是一個lambda對象變量,並將該函數標記爲'inline'? –
@JoachimPileborg這應該是一個答案。 OTOH,它可以防止這種'unique_ptr'的默認構造。 – Angew