与C++不同,C语言中没有像构造函数和析构函数这样的概念。在C语言中,如果需要进行初始化或清理工作,...
1、析构函数签名不正确:C++规定析构函数不能接受任何参数,也不能指定返回类型,甚至不能被声明为const,如果违反这些规则,编译器将报错。 “`cpp class MyClass { public: ~MyClass(int value); // 错误,析构函数不能有参数 }; “` 2、未定义析构函数:如果你在类声明中指定了一个析构函数(即使是默认的)...
你用它给自己理发,结果是未定义的 你用它往主板上安装CPU,结果是未定义的 你用它掏自己的鼻孔,结...
不应使用空析构函数。如果类包含析构函数,Finalize 队列中则会创建一个项。调用析构函数时,将调用垃圾回收器来处理该队列。如果析构函数为空,则只会导致不必要的性能丢失 程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合...
除了上一节讲到的类对象在创建时自动调用的构造函数,在对象销毁时也会自动调用一个函数,它也和类名同名,也没有返回值,名字前有一个波浪线~,用来区分构造函数,它的作用主要是用做对象释放后的清理善后工作。它就是析构函数。 与构造函数相同的是,与类名相同,没有返回值,如果用户不定义,系统也会自动生成一个空...
定义析构函数 为了与构造函数区分, 在析构函数前加”~”号, 并且在定义析构函数时, 不能指定返回类型, 即使是void类型也不可以; 也不能指定参数, 但可以显式的说明参数为void 格式: ~类名(); // 或者 ~类名(void); 代码像这样: ~Point(); // 或者 ~Point(void); ...
以下是可能导致 C/C++ 出现未定义行为的几种情况:访问未初始化的变量。C/C++不会对未初始化的变量...
析构函数没有参数(D.析构函数可以有一个或多个参数 说法错误),也没有返回值(C.析构函数不能指定返回类型 说法正确)。 一个类中有且仅有一个析构函数,如果程序中没有定义析构函数,则编译器自动生成默认的析构函数。故选项C.析构函数不能指定返回类型为正确选项。反馈...
综上所述,我认为,如果你的需求是不允许出现未定义的行为,则不适合面向对象的编程。这个问题不仅限于C++,任何具有构造函数和析构函数的面向对象语言都不适合。 因此,更适合面向对象语言的项目是:对开发速度有要求、但对“不存在未定义的行为”没有太高要求。
将父类的析构函数改为虚函数,就可以避免这种情况。 1. //test.cpp 2. #include <iostream> 3. using namespace std; 4. 5. class father 6. { 7. public: 8. father() 9. { 10. new int; 11. } 12. 13. virtual~father() 14. { ...