指针不论是指向malloc还是new分配得到的内存,一定要注意在改变指针指向之前一定要先释放旧的内存块。
class
Test
{
public
:
Test
()
{
if
(
p
!=
NULL
)
{
free
(
p
);
p
=
NULL
;
}
p
= (
char
*)
malloc
(
sizeof
(
char
));
}
Test
(
const
Test
&
C1
)
{
cout
<<
"ooo我在进行拷贝构造"
<<
endl
;
p
= (
char
*)
malloc
(
sizeof
(
char
));
*
p
= *
C1
.
p
;
}
~
Test
()
{
cout
<<
"ooo我在析构"
<<
endl
;
if
(
p
!=
NULL
)
{
free
(
p
);
p
=
NULL
;
}
}
void
operator=(
Test
&
C2
)
{
if (p !=NULL)
{
free(p );
p = NULL ;
}
//这里很重要,A=B时,A本身已经malloc了一块内存,如果此时没有
free,直接执行下面一句让p指向另一块内存,那么之前malloc出来的
内存如何释放?
p
= (
char
*)
malloc
(
sizeof
(
char
));
*
p = *C2.p;
}
private
:
char
*
p
;
};
void
main
()
{
Test
A
;
Test
B
;
A
=
B
; //这里要注意,直接“=”的情况下不会调用拷贝构造函数,要用=重载来避免浅拷贝
}