在类中,浅拷贝一次构造,两次析构,为什么会导致内存泄露?

时间:2020-12-06 19:50:12
请问,在类中,浅拷贝调用一次默认构造函数,调用两次析构函数,为什么会导致内存泄露?原理是什么?

14 个解决方案

#1


看看你的代码是怎么写的

#2


https://blog.csdn.net/qq_19272431/article/details/79194303
解释很详细

#3


我想知道这种情况导致内存泄露的原理,你那篇博客并没有讲,非常感谢!

#4


引用 2 楼 ma418576627 的回复:
https://blog.csdn.net/qq_19272431/article/details/79194303
解释很详细

我想知道这种情况导致内存泄露的原理,你那篇博客并没有讲,非常感谢!

#5


这是重复释放而不是内存泄漏吧。

#6


你是不是自己实现了拷贝构造函数,就像这样?
class A {
private:
public:
A();
A(A a);
}

#7


引用 5 楼 ForestDB 的回复:
这是重复释放而不是内存泄漏吧。

书上都写的是属于内存泄露

#8


类内如果有堆内存指针成员。由于浅拷贝只拷贝了指针的值,而两次析构两次释放该堆内存的指针,造成的应该是重复释放的问题,或空悬指针问题。

#9


引用 6 楼 ai977313677 的回复:
你是不是自己实现了拷贝构造函数,就像这样?
class A {
private:
public:
A();
A(A a);
}

第一次见到这样的拷贝构造函数 在类中,浅拷贝一次构造,两次析构,为什么会导致内存泄露?

#10


引用 7 楼 chen134225 的回复:
Quote: 引用 5 楼 ForestDB 的回复:

这是重复释放而不是内存泄漏吧。

书上都写的是属于内存泄露


引用 7 楼 chen134225 的回复:
Quote: 引用 5 楼 ForestDB 的回复:

这是重复释放而不是内存泄漏吧。

书上都写的是属于内存泄露


不叫内存泄漏。叫野指针吧

#11


内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费(重点),导致程序运行速度减慢甚至系统崩溃等严重后果。  你这个在已经释放过一次后,第二次释放会失败,但是不会对系统造成内存的浪费(可能会直接崩溃 在类中,浅拷贝一次构造,两次析构,为什么会导致内存泄露?),所以说,应该是不能叫内存泄漏的。这种重复释放的应该是直接崩溃的。。。

#12


会导致double free

#13


内存泄露可能会造成内存未释放,浪费内存。这个是重复释放一块内存,导致崩溃了。

#14


不能释放两次

#1


看看你的代码是怎么写的

#2


https://blog.csdn.net/qq_19272431/article/details/79194303
解释很详细

#3


我想知道这种情况导致内存泄露的原理,你那篇博客并没有讲,非常感谢!

#4


引用 2 楼 ma418576627 的回复:
https://blog.csdn.net/qq_19272431/article/details/79194303
解释很详细

我想知道这种情况导致内存泄露的原理,你那篇博客并没有讲,非常感谢!

#5


这是重复释放而不是内存泄漏吧。

#6


你是不是自己实现了拷贝构造函数,就像这样?
class A {
private:
public:
A();
A(A a);
}

#7


引用 5 楼 ForestDB 的回复:
这是重复释放而不是内存泄漏吧。

书上都写的是属于内存泄露

#8


类内如果有堆内存指针成员。由于浅拷贝只拷贝了指针的值,而两次析构两次释放该堆内存的指针,造成的应该是重复释放的问题,或空悬指针问题。

#9


引用 6 楼 ai977313677 的回复:
你是不是自己实现了拷贝构造函数,就像这样?
class A {
private:
public:
A();
A(A a);
}

第一次见到这样的拷贝构造函数 在类中,浅拷贝一次构造,两次析构,为什么会导致内存泄露?

#10


引用 7 楼 chen134225 的回复:
Quote: 引用 5 楼 ForestDB 的回复:

这是重复释放而不是内存泄漏吧。

书上都写的是属于内存泄露


引用 7 楼 chen134225 的回复:
Quote: 引用 5 楼 ForestDB 的回复:

这是重复释放而不是内存泄漏吧。

书上都写的是属于内存泄露


不叫内存泄漏。叫野指针吧

#11


内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费(重点),导致程序运行速度减慢甚至系统崩溃等严重后果。  你这个在已经释放过一次后,第二次释放会失败,但是不会对系统造成内存的浪费(可能会直接崩溃 在类中,浅拷贝一次构造,两次析构,为什么会导致内存泄露?),所以说,应该是不能叫内存泄漏的。这种重复释放的应该是直接崩溃的。。。

#12


会导致double free

#13


内存泄露可能会造成内存未释放,浪费内存。这个是重复释放一块内存,导致崩溃了。

#14


不能释放两次