c++ - 如何使用 const 成员构造动态数量的类?

标签 c++ class constructor constants declaration

所以在处理 my last question 之后,我把它归结为:

我需要将未知数量的用户定义类 (object_c) 添加到 boost::intrusive::list .这些类中有 const 成员。要将它们推送到 list,我需要做的就是构建它们,然后让它们持久存在,它们会自动添加自己。

有问题的代码基本上是

for (unsigned i = 0; i < json_objects.count(); ++i) {

    ctor_data = read(json_objects[i]);

    // construct object here

}

我尝试过的:

  1. malloc对象数组,然后填充它们: 不起作用,因为我有 const 成员。

    static object_c *json_input = (object_c*) malloc(json_objects.size() * sizeof(object_c));
    
    ...
    
    json_input[i](ctor_data); //error: no match for call to (object_c) (ctor_data&)
    
  2. 制作指针:这不起作用,函数无法正常使用它,并且它不会被破坏

    new object_c(ctor_data);
    
  3. 将对象推回 std::vector: 这行不通,当我尝试 (output here) 时,增加了数十行的咆哮

    vector_of_objects.push_back(object_c(ctor_data));
    
  4. 只是声明该死的东西: 显然行不通,立即超出范围 (dur)

    object_c(ctor_data);
    

我相信有一种简单的方法可以做到这一点。有人有主意吗?周末的大部分时间我都在处理这个问题。

最佳答案

#3 应该是您需要使用的方法。您需要详细说明您的错误是什么。

如果它只是 operator= 正如你在上一个问题中显示的那样,并且你不想定义一个,你可以尝试 emplace_back 只要你在 C++11。当然,我说的是 std::vector,我需要检查 boost::intrusive 中是否有等效项。编辑:我可能错了,但它似乎还不支持移动语义..

或者使用带有智能指针的#2

如果您要使用 #1,您需要使用 placement new 作为 @rasmus 指示。

关于c++ - 如何使用 const 成员构造动态数量的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14554180/

相关文章:

C++ - 将数据从 float vector 复制到 uint8 vector ?

c++ - 私有(private)类名缩写技巧?

c# - 构造函数0参数错误

c++ - 使用赋值作为条件表达式?

c++ - 将具有嵌套类型的类分离为标题和源

c++ - 如何将 QListWidget 标签打印成字符串?

java - 在父类上使用instanceof来抽象类和非抽象子类

java - 设计具有枚举依赖性的类的最佳方法

java - Xml - Bean 构造函数

AngularJS + Jasmine 如何监视在 Controller 中调用的服务构造函数