就是這麼多。我需要分配內存並將其傳遞給一個帶void *的函數。我想使用shared_ptr,但我不知道該怎麼做。如何創建一個shared_ptr傳遞給一個無效的函數*
2
A
回答
5
你的意思是這樣的:
boost::shared_ptr<int> myInt(new int(5));
call_some_function(myInt.get());
這隻能讓的功能使用int*
。它不應該試圖刪除它或取得所有權。
如果你想只是原始的內存,使用vector
:
std::vector<char> memory(blockSize);
call_some_function(&blockSize[0]);
同樣,內存屬於vector
。
如果函數不想所有權,沒有必要把它包裝成的東西,因爲你不會管理它:
call_some_function(new int);
call_some_function(new char[blockSize]);
確保功能將被釋放出來致電delete
/delete[]
。如果不是(例如,它打算利用free()
),你需要使用malloc
代替:
template <typename T>
T* malloc_new(void)
{
void* memory = std::malloc(sizeof(T));
if (!memory)
throw std::bad_alloc();
try
{
return new (memory) T();
}
catch(...)
{
std::free(memory);
throw;
}
}
call_some_function(malloc_new<int>());
call_some_function(malloc(blockSize));
+1
+1,真的很好回答。當多個操作發生時,要小心在調用位置創建內存(當被調用的函數擁有所有權時):'new int(5)'是'foo(bar(),new int(5))'可能會泄漏在bar()和bar()拋出異常之前執行。使用智能指針更安全(即使更長):'std :: auto_ptr
-3
相關問題
- 1. 傳遞表名作爲參數傳遞給一個函數創建一個表
- 2. ucrtbase.dll:一個無效的參數傳遞給一個函數,該函數認爲無效的參數致命
- 3. 如何創建一個函數並將一個變量傳遞給它?
- 4. 將第一個函數中創建的數組傳遞給第二個函數
- 5. 如何將一個結構數組傳遞給一個函數?
- 6. 如何將一個空參數傳遞給一個python函數?
- 7. 如何將一個整數傳遞給一個javascript函數?
- 8. 如何將一個變量從一個函數傳遞給另一個函數?
- 9. 如何將一個變量從一個函數傳遞給另一個函數?
- 10. 如何將一個函數指針傳遞給這個函數
- 11. 將一個函數的值傳遞給另一個函數
- 12. 將一個函數的值傳遞給另一個函數
- 13. 如何將一個函數傳遞給另一個python
- 14. jQuery:如何將值從一個函數傳遞給另一個?
- 15. 如何將一個變量傳遞給一個函數?
- 16. 如何將函數傳遞給python中的另一個函數
- 17. 參數傳遞給另一個函數
- 18. 參數傳遞給另一個函數
- 19. 傳遞函數作爲參數傳遞給另一個函數
- 20. 將結構傳遞給一個函數會創建一個默認錯誤
- 21. 如何將一個函數中的值傳遞給另一個函數?
- 22. 如何將一個函數的結果傳遞給另一個函數?
- 23. 如何將一個函數的變量傳遞給另一個函數?
- 24. 將變量從一個函數傳遞給另一個函數
- 25. Ç - 傳遞一個函數值給另一個函數
- 26. 關於產品傳遞一個函數創建一個變量
- 27. 努力將一個函數中創建的數組傳遞給排序函數
- 28. 如何通過一個函數傳遞參數給函數? (ES6)
- 29. 使用Firebase,我如何將創建的密鑰傳遞給另一個函數?
- 30. jQuery的 - 創建一個函數,並傳遞一個文檔元素作爲參數傳遞給它
函數對參數做了什麼?另外,我認爲可以將內存分配爲char數組(例如,使用'std :: vector',並將'&vec [0]'傳遞給函數)。 –
UncleBens
2010-03-23 19:40:35
函數將google :: protobuf序列化到內存中。一個標題被預置,並且該塊通過電線發送。 – shaz 2010-03-23 22:55:40