2017-07-08 608 views
4

是否有可能使用make_shared以及一個指向shared_ptr <>指向的數組的自定義刪除器(以下是我嘗試通過構造函數執行操作的方式,但我不知道如何通過使用make_shared工作)?shared_ptr <>到數組定製刪除器(使用make_shared)

int n = 5; 
shared_ptr<int> a(new int[n], default_delete<int[]>()); 

我想做些什麼使它看起來像類似於這樣的東西,而是與一個int數組分配內存,並且還具有一個定製刪除。那可能嗎?

int n = 5; 
shared_ptr<int> a; 
a = make_shared<int>(); 
+0

可能的複製(https://開頭stackoverflow.com/questions/13061979/shared-ptr-to-an-array-should-it-be-used) – Sneftel

+1

@Sneftel雖然問題是類似的,但你鏈接的問題不符合make_shared,這是問題我去那兒。 – Arman

回答

5

不幸的是,沒有辦法,現在與std::make_shared指定定製刪除的,你卻可以,使周圍make_shared的包裝,如果你想

a little less efficient,但¯\ _(ツ) _ /¯)

template <typename Type, typename Deleter, typename... Args> 
auto make_shared_deleter(Deleter&& deleter, Args&&... args) { 
    auto u_ptr = std::make_unique<Type>(std::forward<Args>(args)...); 
    auto with_deleter = std::shared_ptr<Type>{ 
     u_ptr.release(), std::forward<Deleter>(deleter)}; 
    return with_deleter; 
} 

,然後用它像這樣

int main() { 
    auto ptr = make_shared_deleter<int>(std::default_delete<int>(), 1); 
    cout << *ptr << endl; 
} 

如果你只是想使用shared_ptr,並將它指向一個數組,見shared_ptr to an array : should it be used?爲[共享\ _ptr到一個數組中?:它應該被用來]更

+1

啊,我明白了。這有一點幫助。感謝您的答覆。 – Arman

+1

我的意思是,你不*真的需要'with_deleter' :) – Rakete1111

+0

但是使用'std :: make_shared'的很大一部分是分配的減少,這並不能解決那個問題 –

相關問題