【发布时间】:2018-11-05 04:46:59
【问题描述】:
我有一个 .h 文件的类:
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
}
.cxx 文件如下所示:
//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;,虚拟析构函数也设置_cShock = NULL;。
所以当调用析构函数时,它只会将指针设置为NULL,但实际指向的内存不会被破坏,对吧,导致内存泄漏?
这个类被调用了很多次,在某个时间点之后程序由于过多的内存使用而崩溃。我该如何解决这个问题?
【问题讨论】:
-
不要使用受保护的数据。删除析构函数中的指针。还是我在这里遗漏了什么?
-
"但指向的实际内存不会被破坏,对吧" - 这是正确的。 “导致内存泄漏?” - 这取决于类是否拥有指向的对象。是吗?
-
如果它确实拥有指向的对象,则不应使用原始指针开始。
-
你为什么不使用像 std::unique_ptr 这样的智能指针类?
-
我真的..真的很想问一个问题:“你如何保护数据?”尽管有裸指针
标签: c++ class c++11 pointers memory-leaks