0

这是 B+ 树的一个节点。我想使用智能指针,因为我的程序泄漏了大量内存。如何使用智能指针转换代码?

class node
{

public:

    long* key;
    int capacity;
    node** nodes;
    node* parent;
    long* value;

    node ( int order ) {
        key = new long[order + 1];
        value = new long[order + 1];
        nodes = new node *[order + 2];
        capacity = 0;
        parent = NULL;
        for ( int i = 0; i <= order + 1; i++ ) {
            this->nodes[i] = NULL;
        }
    }
    ~node() {
        delete[] key;
        delete[] value;
        for ( int i = 0; i <= order + 1; i++ ) {
            delete nodes[i];
        }
    }

};
4

1 回答 1

5

不要使用智能指针。要聪明,不要使用指针,而是使用容器

#include <vector>

struct node
{
    std::vector<long>   keys;
    std::vector<long>   values;

    std::vector<node *> nodes;
    node *              parent;
};

根据您的结构的约束,我什至可能希望制作parent一个node &(如果父级总是先出现并且从不改变),或者可能是一个std::reference_wrapper<node>. 但这是一个小问题。)

于 2012-10-25T23:53:22.053 回答