【发布时间】:2016-05-11 11:23:26
【问题描述】:
我目前正在创建一个应用来启动外部应用。 启动外部应用程序的签名是:
int launchApp(int argc, char** argv); // argc = amount of arguments, argv = arguments
要向std::vector<char *> 结构添加参数,我使用以下 lambda:
auto addArgument = [](std::vector<char *> & lArguments,
const std::string & sArgument)
{
auto cstr = new char[sArgument.size() + 1];
std::copy(sArgument.cbegin(), sArgument.cend(), cstr);
cstr[sArgument.size()] = '\0';
lArguments.push_back(cstr);
};
并启动外部应用程序:
std::vector<char *> lArguments;
addArgument(lArguments, "Argument 1");
addArgument(lArguments, "Argument 2");
launchApp(lArguments.size(),static_cast<char**>(lArguments.data());
//... Clean up arguments
我将如何以 RAII 方式执行此操作?
我正在考虑改用std::vector<std::vector<char>>。但是,我怎样才能将底层原始数据(char**)传递给launchApp()? static_cast<char**>(lArguments.data()) 不行...
【问题讨论】:
-
我想知道
std::vector<std::unique_ptr<char[]>>是否可以工作...std::unique_ptr可以没有超出它所拥有的原始指针的开销,但我不知道假设您可以简单地使用reinterpret_cast是否安全向量data指针。
标签: c++ c++11 memory-management raii