如何使用std :: shared_ptr作爲double數組?另外使用shared_ptr的優點/缺點是什麼?std :: shared_ptr的用法
5
A
回答
9
這取決於你在做什麼。如果你只是想雙打的可變數組,去
std::vector<double>
例子:
std::vector<double> v;
v.push_back(23.0);
std::cout << v[0];
如果共享所述陣列事項的所有權轉讓給你,例如使用
std::shared_ptr<std::vector<double>>
實施例:
std::shared_ptr<std::vector<double>> v1(new std::vector<double>);
v1->push_back(23.0);
std::shared_ptr<std::vector<double>> v2 = v1;
v2->push_back(9.0);
std::cout << (*v1)[1];
可替換地,加速具有
boost::shared_array
其用於類似的目的。在這裏看到:
http://www.boost.org/libs/smart_ptr/shared_array.htm
至於一些優勢/的shared_ptr去的缺點:
優點
- 自動共享的基於引用計數的資源釋放 - 有助於避免內存泄漏和其他與應用程序未被取消分配相關的問題
- 可以更容易地編寫異常安全代碼
缺點
- 內存開銷來存儲引用計數的小物件
- 性能可以比原始指針糟糕的是顯著(但衡量這個)
6
你也可以提供array deleter:
template class ArrayDeleter {
public:
void operator() (T* d) const
{ delete [] d; }
};
int main()
{
std::shared_ptr array (new double [256], ArrayDeleter());
}
+1
你也可以使用lambda,我想:'std :: shared_ptr
相關問題
- 1. std :: enable_if和std :: shared_ptr
- 2. 安全std :: tr1 :: shared_ptr的用法
- 3. C++ 0x std :: shared_ptr與boost :: shared_ptr
- 4. 使用Qt中std :: shared_ptr的
- 5. QCache和std :: shared_ptr的
- 6. std :: shared_ptr與std容器
- 7. C++ std :: vector <std :: shared_ptr>
- 8. 如何處理不斷髮展的C++ std :: namespace?例如:std :: tr1 :: shared_ptr vs. std :: shared_ptr vs. boost :: shared_ptr vs. boost :: tr1 :: shared_ptr
- 9. 無法使用std :: shared_ptr作爲std :: map中的值類型?
- 10. 正確使用std :: shared_ptr和std :: auto_ptr
- 11. 使用Boost Python&std :: shared_ptr
- 12. 使用std :: queue與shared_ptr?
- 13. C++中的空std :: shared_ptr與空std :: shared_ptr有什麼區別?
- 14. std :: shared_ptr迭代器
- 15. 的std :: shared_ptr的雙回調
- 16. 的std :: shared_ptr的Deletor類型
- 17. C++中std :: unique_ptr和std :: shared_ptr的區別
- 18. QSharedPointer VS std :: tr1 :: shared_ptr VS boost :: tr1 :: shared_ptr
- 19. 將std :: shared_ptr <char>轉換爲std :: shared_ptr <unsigned char>
- 20. 如何解決boost :: shared_ptr和使用std :: shared_ptr之間的衝突?
- 21. Qt應用程序和std :: shared_ptr的
- 22. 內存管理與std :: list和std :: shared_ptr
- 23. Doxygen可以識別std :: shared_ptr或std :: map
- 24. C++ 11:將std :: is_pointer擴展到std :: shared_ptr
- 25. 如何使用的std ::綁定的std :: shared_ptr的
- 26. 錯誤2664 - 無法從std :: vector <...>轉換爲std :: tr1 :: shared_ptr
- 27. 使用std :: shared_ptr檢測循環引用
- 28. 我如何使用box2d使用std :: shared_ptr?
- 29. 將其轉換爲std :: shared_ptr
- 30. 從std :: shared_ptr竊取位
不要使用'的std :: shared_ptr'爲一個動態分配的數組,它不會調用正確的'delete'。你可能想'std :: vector'。 –
birryree
2012-03-26 16:52:20
@birryree:從技術上講,如果共享所有權語義對您很重要,您可以使用std :: shared_ptr>。或Boost的shared_array。看到這個問題,例如:http://stackoverflow.com/questions/6796655/why-use-one-vs-the-other-boostshared-array-vs-boostshared-ptrstdvecto –
2012-03-26 16:56:03
@StuartGolodetz - 關於所有權語義的好點。 piyush314必須知道'shared_array'是一個Boost構造(不是標準的),如果他確實想要一個原始分配的數組,他可以使用'std :: default_delete'作爲指針刪除器的參數,如下所示: 'std :: shared_ptr name(new double [size],std :: default_delete ());'。 –
birryree
2012-03-26 16:59:26