我自己定义了一个析构函数,主要是将指针为空。为什么用我这个析构函数就会报错,说什么出现断点,要么就是报错是nullptr。我的析构函数不就是要将指针变为空吗,为什么还会报错呢?还是说重复delete这个指针了?
编译器是啥版本,析构函数本身没有问题,把前面的代码发出来看看
有可能是 拷贝构造没有写 , 用的默认的,有一个浅拷贝,重复 delete 了 两个指针指向的同一片内存
NULL本质是用宏定义的:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
但是在极端的函数重载情况下,可能会有问题,如下代码
void f(int* p)
{
cout << "f(int*)" << endl;
}
void f(int x)
{
cout << "f(int)" << endl;
}
int main()
{
f(NULL);//因为NULL的定义 会匹配到f(int) 但是我想让它去的是int*啊
f(0);
f((int*)NULL);//要正确匹配 必须强转一下
f(nullptr);
}
所以C++11引入了nullptr关键字
注意: