在C++中删除新结构

Sch*_*mer -2 c++ free struct memory-management delete-operator

我在C++代码中有错误的行为,似乎是由于动态创建的结构的错误释放造成的.结构形式如下:

typedef struct
{
    char *value;
} Element;

typedef struct
{
    int num;
    Element **elements;
    int *index;
} Container;
Run Code Online (Sandbox Code Playgroud)

它们是这样创建的:

Element *new_element(int size)
{
    Element *elem = new Element;
    elem->value = new char[size];
    return elem;
}

Container *new_container(int num)
{
    Container *cont = new Container;
    cont->num = num;
    cont->elements = new Element*[num];
    cont->index = new int[num];
}
Run Code Online (Sandbox Code Playgroud)

解冻这些的正确方法是什么?

rig*_*old 6

您可以通过将资源管理外包给编译器来轻松解决所有释放问题:

#include <cstdlib>
#include <string>
#include <vector>

struct Element {
    Element() = default;
    explicit Element(std::size_t size) : value(size, '\0') { }

    std::string value;
};

struct Container {
    explicit Container(std::size_t size) : elements(size), index(size) { }

    std::vector<Element> elements;
    std::vector<int> index;
};
Run Code Online (Sandbox Code Playgroud)

有关您将来的所有资源管理问题,请参阅"权威C++书籍指南和列表".