我有一个以.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,但实际内存不会被破坏,这会导致内存泄漏吗?
此类被多次调用,并且在某一点之后程序因过度内存使用而崩溃。我该如何解决这个问题?
答案 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);