2012-06-03 25 views
0

我想改用我的代碼使用make_shared<type>(),但我有很多不完整的類型(完全在創建時間),想知道是否有無論如何make_shared將不完整的工種或者允許我傳遞刪除類型。使用不完全類型make_shared

我環顧四周,並沒有發現與此相關的所以要麼這只是工作的任何信息?或者我忽略了一些基本的東西。

#define NEW_PARAMS(Type, ...) ::std::shared_ptr<Type>(new (Type)(__VA_ARGS__), ::std::default_delete<Type>()) 

上面是我用來創建新對象的宏。想將其轉換爲

#define NEW_PARAMS(Type, ...) ::std::make_shared<Type>(__VA_ARGS__, ::std::default_delete<Type>()) 

編輯:只是爲了澄清我想問如果我能傳遞一個刪除器型與make_shared

+1

「我想問如果我能傳遞一個刪除器型與make_shared創建shared_ptr的」你能澄清其實是問*是*,而不是大多講的不完全類型裏面什麼都沒有做什麼,你這個問題'試圖做什麼?只是重申你的問題。 –

回答

3

沒有創建shared_ptrmake_shared不能通過有刪除對象它創建的shared_ptr。一般來說,你不需要。由於它使用new(專門放置new)來創建指針,因此需要通過調用析構函數來刪除它。所以你可以做的事情並不多,因爲make_shared直接管理內存。

+0

該類型在創建時即完成,即調用new或make_shared時。 – Sharad

+2

@Sharad:那麼你在編譯器中遇到什麼錯誤?這些'make_shared'的用途在哪裏? –

+0

對不起,我想我錯過了我的問題中的一點。我想知道是否可以將刪除程序傳遞給新創建的shared_ptr? – Sharad