我有一個庫函式,它具有以下簽名func(int argc,char** argv),其中 argv 是一個 c 字串陣列,并根據應用程式的封閉環境手動制作。
我可以unique_ptr用來管理記憶體argv而不是通過new/delete運算子分配/釋放它們嗎?
uj5u.com熱心網友回復:
我可以使用 unique_ptr 來管理 argv 的記憶體,而不是通過 new/delete 運算子分配/釋放它們嗎?
當然。幾乎沒有任何情況下您不能將 new/delete 替換為std::unique_ptr.
也就是說,對于 的陣列,可能有更方便的替代方案char,例如std::string或者std::vector。
uj5u.com熱心網友回復:
您的庫函式似乎想要像 main 一樣被呼叫。
main的論點有點特別,因為char**應該是char const*const*. 有些程式不尊重這一點,但大多數都這樣做。
但到目前為止,最簡單的方法是:
int call_fake_main( int(*fake_main)(int, char**), std::vector<std::string> args ) {
std::vector<char*> ptrs;
ptrs.reserve(args.size());
for (auto& str:args)
ptrs.push_back(str.c_str());
return fake_main( static_cast<int>(ptrs.size()), ptrs.data() );
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/415289.html
標籤:
