ptr智能指针会自动析构的疑问?
看不到测试代码。
原则上,发生异常或函数的返回路径上,析构函数的调用是由编译器插代码来保证的。不过一般不要在构造和析构函数里抛出异常。
C++的异常是库和逻辑级别的,必须代码throw;错误的内存访问、除零错误等不是C++异常(在曾经的vs ide上,ms扩展了编译器行为允许try/catch处理结构化异常,注意看IDE设置选项)。这是不同于Java和C#的,他们是虚拟机平台级别的,除代码抛出外,发生异常时虚拟机也会抛出。
另外,在C++里异常是可选的,很多库都提供了关闭或开启的开关。而Java和C#是强制性的,属于核心机制。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有