答案是可以。

但是有个误区要注意。虽然可以手动调用析构函数,但是对象的内存并没有释放。看一下代码示例:

#include "stdafx.h"
#include <iostream>
#include <crtdbg.h>#ifdef _DEBUG
#define new  new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
using namespace std;class A
{
public:A() { cout << "构造" << endl; };~A() { cout << "析构" << endl; };virtual void func() {};char c;
};int main()
{//检测内存泄漏,在vs输出窗口调试状态下,可以显示内存泄漏的代码位置_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);A* p = new A;p->~A();
//  delete p;return 0;
}

调试上面的代码会发现,存在内存泄漏,因为A类型的对象没有释放内存。

这里的误区就是不明确析构函数的作用。虽然在使用delete时会调用析构函数,但是内存的释放不是由析构函数完成的。

析构函数和构造函数的作用是,在使用new时,new会先分配内存,然后调用构造函数。调用delete时,会先调用析构函数,再释放内存。因此,析构函数只是会在调用delete时被执行,但释放内存并不是析构函数完成的,而是delete完成的,因此,销毁对象时要用delete,而不是直接调用析构函数。手动调用析构函数是可以的,但是没太大意义。

是否可以手动调用析构函数相关推荐

  1. python在删除对象时会自动调用析构函数_Python面向对象程序设计构造函数和析构函数用法分析...

    本文实例讲述了Python面向对象程序设计构造函数和析构函数用法.分享给大家供大家参考,具体如下: 构造函数和析构函数 1.构造方法的使用 很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名 ...

  2. C++对象模型3——vptr的位置、手动调用虚函数、从汇编代码看普通调用和多态调用

    一.vptr的位置 class test { public:int i; virtual void testfunc() {} };int main() {test a;char* p1 = rein ...

  3. delete不调用析构函数的两种情况

    1. 所使用的类为预定义类 下面这段函数代码编译运行时没有问题的,不需要CPtr的定义 ---PtrUser.h class CPtr; // 预定义 class CPtrUser { public: ...

  4. 中有atoi函数吗_C++ 多态的实现及原理,深挖vptr指针,手动调用虚函数

    什么是多态? 父类指针即根据指向的不同对象,响应同一消息(函数调用),产生不同行为. 多态三要素? 1,继承 2,虚函数重写 3,父类指针(引用)指向子类对象 多态的实现很简答,让我们来看一段代码 # ...

  5. 飞鸽传书:谈谈RenderControl手动调用

    飞鸽传书:谈谈RenderControl手动调用,手动调用控件的RenderControl方法,OnPreRender方法不执行的解决办法. 有些网页需要在后台动态创建服务器控件,并且将控件的html ...

  6. 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件

    GitHub源码仓库:Qt学习例程 1. QPainter绘图抗锯齿 /// 抗锯齿测试 /// painter.drawEllipse(QPoint(100,50), 50, 50);// 设置 抗 ...

  7. C++ 什么时候调用析构函数和构造函数

    析构函数是在对象消亡时,自动被调用,用来释放对象占用的空间. 有四种方式会调用析构函数: 1.生命周期:对象生命周期结束,会调用析构函数. 2.delete:调用delete,会删除指针类对象. 3. ...

  8. 关于c++显示调用析构函数的陷阱

    一.文章来由 现在在写一个项目,需要用到多叉树存储结构,但是在某个时候,我需要销毁这棵树,这意味着如果我新建了一个树对象,我很可能在某处希望将这个对象的声明周期终结,自然会想到显示调用析构函数,但是就 ...

  9. C++ 容器存储对象时,指针调用析构函数触发的一系列BUG

    今天给大家分享一篇BUG文章,请耐心看完,也许你以后也会遇到这样的BUG而解决不了! 需求是这样的: 定义一个Student类,里面有私有成员整型和指针! 例如:int age; char *name ...

最新文章

  1. vim 键盘宏操作 -- 大道至简
  2. 【重学Vue】数据响应原理真的是双向绑定吗?
  3. 面向初级 Web 开发人员的 Tomcat
  4. bootstrap-wysiwyg: 迷你的Bootstrap的所见即所得的HTML富文本编辑器
  5. django 的用户验证及登录状态保持
  6. 原来Rproj还可以这么使用
  7. 提升服务器性能的建议
  8. 【转载】并发操作会带来哪些数据不一致性(数据库)
  9. 【NOIP2017】逛公园 拆点最短路+拓扑(记忆化搜索
  10. Ripple(Glance)
  11. 解决Eclipse Pydev中import时报错:Unresolved import
  12. java 从m个数中均匀找出n个数_M个数里面找出最大的N个数
  13. jquery validation用法
  14. python编程和继承_python面向对象编程-继承与派生
  15. CentOS 7服务
  16. 数据分析:AI智能科技影响下,电话机器人实现落地
  17. 如何修复win7蓝牙服务器,快速解决win7系统蓝牙驱动的修复方法
  18. js 生成二维码及打印
  19. UART使用EDMA收发
  20. el-table使用span-method合并行

热门文章

  1. 03.HTML CSS
  2. 企业如何做好营销管理?
  3. 8104网站端服务器返回错误,Catalyst 9800无线控制器普通的无线客户端连通性问题...
  4. openlayers6 使用svg格式图片作为Icon标记
  5. POI兴趣点在地图显示上进行聚合算法的研究
  6. 人的一生,要死去三次。
  7. python实验报告心得1000字,python数据分析论文2000字
  8. python初学者_初学者的热门Python资源
  9. 《C# 语言入门详解(刘铁锰) - 学习笔记 - Lambda表达 / Linq查询》
  10. “Map.get“ and value test should be replaced with single method call