2011-12-24 19 views

回答

43

有一個unique_ptr的專業化,像unique_ptr<T[]>

#include <iostream> 
#include <memory> 

struct test 
{ 
    ~test() { std::cout << "test::dtor" << std::endl; } 
}; 

int main() 
{ 
    std::unique_ptr<test[]> array(new test[3]); 
} 

當您運行它時,您將收到此消息。

test::dtor 
test::dtor 
test::dtor 

如果你想使用shared_ptr,你應該使用std::default_delete<T[]>的缺失者,因爲它沒有有一個像shared_ptr<t[]>

std::shared_ptr<test> array(new test[3], std::default_delete<test[]>()); 
+0

謝謝,就是我在找的東西!我不知道有專門的陣列。 – 2011-12-24 19:21:57

0

只要矢量用作數組包裝,如果您使用任何合適的智能指針與矢量作爲內部對象,該怎麼辦?

+0

如果元素類型不是可複製構建的,則vector :: emplace_back()和vector :: push_back()將不起作用。我不知道初始化初始化列表,但我懷疑有同樣的問題。 – Syncopated 2015-03-27 10:20:59

+0

是的,你是對的,在這種情況下,我們需要用額外的包裝來包裝這些不可複製的東西,這往往是一些矯枉過正:) – 2015-03-27 12:06:21