加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 此结构是否需要非默认构造函数

发布时间:2020-12-16 09:31:17 所属栏目:百科 来源:网络整理
导读:我在C中有以下结构,我想知道在使用它时是否需要为它定义一个非默认构造函数,如下所示:boost :: shared_ptr node p_node = boost:shared_ptr node(); struct node{ std::string name; std::mapstd::string,std::vectorvariant values; // it is possible th
我在C中有以下结构,我想知道在使用它时是否需要为它定义一个非默认构造函数,如下所示:boost :: shared_ptr< node> p_node = boost:shared_ptr< node>();

struct node
{
    std::string name;
    std::map<std::string,std::vector<variant> > values; // it is possible that nodes contain as a value,key/value pairs so we need a map

    NodeType type;  //Enum

    typedef struct attrib
    {
        std::string key;
        variant value;  //Boost::variant
    };

    std::vector<attrib> attributes;

    boost::shared_ptr<node> childnode;
};

解决方法

“这个POD需要一个非默认的构造函数”…… POD是什么? POD不包含字符串和地图等复杂对象. POD代表普通旧数据,类似于双精度数和字符数组.

是否需要构造函数取决于您是否要确保所有数据都在某种合理的状态下初始化. std :: map,std :: vector和std :: string都是初始化的,你是空的.另一个boost :: shared_ptr将为NULL. attrib只是一种类型,你最初不会有任何attrib对象,所以不用担心.但是,除非您自己在构造函数中执行此操作,否则您的NodeType枚举不会在任何位置初始化.那有关系吗?只有你可以决定,但从技术上讲,你必须确保在阅读之前将它分配到某个地方,否则你在技术上会得到未定义的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读