首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复制boost::program_options::parsed_options

复制boost::program_options::parsed_options
EN

Stack Overflow用户
提问于 2016-08-04 12:40:52
回答 1查看 280关注 0票数 0

考虑到这一职能:

代码语言:javascript
运行
复制
po::parsed_options ParserClass::parseOptions(int argc, char *argv[]) {
    return po::command_line_parser(argc, argv)
            .options(desc)
            .positional(pos)
            .run();
}

descposParserClass的成员变量。

这个函数是安全的,还是返回一个parsed_options对象,该对象有指向释放的空闲存储内存的指针,因为函数返回时释放了原对象的分配内存?

你怎么知道语义学的?我试着阅读源代码来找出答案,但这对我来说有点神秘。文件似乎无法说明问题。

如果这个功能不安全,它怎么能被修复?你应该扩展类并定义一个移动操作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-04 13:44:07

如果可以复制或移动对象,它基本上意味着三件事:

  1. 操作定义良好,操作安全。
  2. 库作者搞砸了,拷贝/移动行为不正常。
  3. 在使用它时,您必须遵循一些不明显的约定(通常是出于性能原因)。

有了boost (以及它被广泛使用的部分,如program_options),我们可以排除第二个选项,对于第三个选项,您可以咨询文档,看那里没有什么可笑的东西。

如果您真的想知道argv指针没有转义函数(我想这是唯一可疑的地方),可以检查相应的basic_command_line_parser构造函数是否将其复制到std::string的向量中(通过detail::make_vector:)

代码语言:javascript
运行
复制
template<class charT>
basic_command_line_parser<charT>::
basic_command_line_parser(int argc, const charT* const argv[])
: detail::cmdline(
    // Explicit template arguments are required by gcc 3.3.1 
    // (at least mingw version), and do no harm on other compilers.
    to_internal(detail::make_vector<charT, const charT* const*>(argv+1, argv+argc+!argc))),
    m_desc()
{}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38767613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档