Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何让一个类使用STL容器/智能指针保存自己的数组?_C++_Oop_C++11_Stl_Std - Fatal编程技术网

C++ 如何让一个类使用STL容器/智能指针保存自己的数组?

C++ 如何让一个类使用STL容器/智能指针保存自己的数组?,c++,oop,c++11,stl,std,C++,Oop,C++11,Stl,Std,所以我基本上想这样做: struct A { A *children[10]; }; 但是,当我执行此操作并创建析构函数时,例如: virtual ~A() { for (A *child: children) { delete child; } } 我有一个分割错误,我不知道为什么。那么,如何使用STL类在一个文件中保存一个列表,这样我就不必担心新建/删除了?我尝试了vector并得到了一个“不完整类型”错误。 在

所以我基本上想这样做:

struct A {

    A *children[10];
};
但是,当我执行此操作并创建析构函数时,例如:

 virtual ~A() {
        for (A *child: children) {
            delete child;
        }
    }
我有一个分割错误,我不知道为什么。那么,如何使用STL类在一个文件中保存一个列表,这样我就不必担心新建/删除了?我尝试了vector并得到了一个“不完整类型”错误。

  • 在(A*child:A){delete child;..的
    中,您可能应该迭代
    子对象
    ,而不是
    A
  • 为了实现上述功能,您应该将孩子存储在
    std::vector
    中,而不是原始数组(您选择的
    std::vector(如
    std::shared_ptr
    )中,而不是原始指针中,这样您就不必删除任何内容
  • 这:


    显式引用(
    &
    )这意味着在循环的每次迭代中,
    child
    将是对
    children
    数组中的
    共享\u ptr
    的引用,而不是副本。因此,当您分配给它时,它将修改数组。

    您是否尝试将问题向量化为包含a,对于您的示例来说,a应该不超过20行。在
    C++17
    中,您可以编写
    struct A{std::vector children;}
    ;而不必担心不完整的类型。这可能不会立即有帮助,但如果您的系统允许,升级到最新标准会有所帮助:)在这里显示的代码中,指针尚未初始化,因此每个删除都会产生未定义的行为。您的第一个循环“按值”迭代。它不会更改
    a.get()->孩子们
    array,与您显然相信的相反。回过头来看,在得到答案后,您不能只问一个新问题来代替旧问题。问一个新问题。谢谢,我知道了如何使用stl容器,但是遇到了初始化问题,请参阅更新question@BeardMagician不要改变规则继续做一些完全不同的事情。改为问一个新问题。所以问题完全改变了,你的答案适合新问题,我的答案适合旧问题。我在这里该怎么做,回滚更改的编辑?放弃?
    for (shared_ptr<A> child: a.get()->children) {
    
    for (shared_ptr<A> &child: a.get()->children) {