C ++由类析构函数中的指针设置为NULL引起的内存泄漏

时间:2018-05-25 18:35:09

标签: c++ class c++11 pointers memory-leaks

我有一个以.h文件为基础的类:

<div class="form">
    <input type="text" id="idperson"><input type="text" id="name">
    <button id="add" type="button">ADD</button>
</div>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
    var people = [];

    $("#add").click(function(){
        var iduser = $("#idperson").val();
        var name = $("#name").val();

        if(people["idperson"]!=iduser){
            people.push({idperson:iduser,nameperson:name});
        }
        console.log(people);
    });
</script>

.cxx文件如下所示:

class dbsk2d_ishock_node : public dbsk2d_ishock_elm{
protected:
    dbsk2d_ishock_edge* _cShock;
    //Some other variables
public:
    dbsk2d_ishock_node (int newid, double stime, vgl_point_2d<double> Or); //Constructor
    virtual ~dbsk2d_ishock_node (); //Destructor
    //Some other functions
}

现在,此类的构造函数设置//Constructor dbsk2d_ishock_node::dbsk2d_ishock_node (int newid, double stime, vgl_point_2d<double> Or) : dbsk2d_ishock_elm (newid, stime) { _cShock = NULL; //Some other variables } //Destructor dbsk2d_ishock_node::~dbsk2d_ishock_node () { _cShock = NULL; //Some other variables } ,虚拟析构函数也设置_cShock = NULL;

因此,当调用析构函数时,它只会将指针设置为NULL,但实际内存不会被破坏,这会导致内存泄漏吗?

此类被多次调用,并且在某一点之后程序因过度内存使用而崩溃。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

  

因此,当调用析构函数时,它只会将指针设置为NULL   但实际的记忆力不会被摧毁,对,   导致内存泄漏?

即可。它会。

  

我该如何解决这个问题?

您可以删除指针

~className()
{
   delete dbsk2d_ishock_edge;
}

或最佳做法是使用Smart Pointers作为成员变量,包括<memory>。 你也可以参考this,因为它看起来你不知道它们。 例如:

protected:
    std::shared_ptr<dbsk2d_ishock_edge>  _cShock;

答案 1 :(得分:1)

在构造函数中将指针设置为NULL时,可以安全地释放执行此操作的内存

myCollection.updateOne(Json_String_filter,Query_with_operoters_like_$set_as_Json_string);