C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 使用Shutdown()方法而不是析构函数进行清理大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Rastertek DirectX tutorials中,它们具有空构造函数和析构函数,而是使用initialize()和shutdown()函数进行对象初始化和清理.在使用这个设计一段时间之后,我可以稍微了解一下使用initialize()方法的好处,但是我不知道如何使用shutdown()方法比将所有清理代码放在析构函数中更好.

他们提供的原因如下:

所以一般用法模式如下:

class Renderer
{
public:
    Renderer() { }
    ~Renderer() { }

    bool initialize(...) { /* perform initialization */ }
    void shutdown() { /* clean-up */ }
}; 

Renderer* renderer = new Renderer;
renderer->initialize(...);

// use the renderer

renderer->shutdown();
delete renderer;
renderer = NULL;

在查看Rastertek的代码时,在我看来它们来自C背景(初始化函数顶部的所有变量,仅使用原始指针和原始数组等),所以我想知道这是否是另一件事在现代C中不必要(对于一个它,它使得使用智能指针更加困难).这个设计有什么好处吗?

解决方法

一般来说,不要在析构函数中进行清理是一个不好的建议.

但是如果清理操作失败,并且想要抛出异常,则可以执行此操作.然后你必须要小心,因为另一个例外是调用abort().对于那种特殊情况,在单独的函数中进行清理是有意义的.

便说一句,代码示例确实看起来像来自c世界的人.

这是正确的,但尽量避免这样的功能.也是从here

因此,只需让线程完成,就会调用析构函数.

大佬总结

以上是大佬教程为你收集整理的c – 使用Shutdown()方法而不是析构函数进行清理全部内容,希望文章能够帮你解决c – 使用Shutdown()方法而不是析构函数进行清理所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。