非默认复制构造函数会减慢程序的速度吗?
Will a non-default copy constructor slow my program down?
我有一个名为Texture的类,它有一个指向SDL_Surface的指针。当我想将它添加到一个向量时,我需要有一个非默认的复制构造函数,以防止在原始值超出作用域时出现问题。我知道只要对象按值传递给函数,就会调用复制构造函数。每一帧通过值传递许多纹理对象给我的渲染函数会导致我的程序变慢吗?我知道我可以通过引用来避免这个问题,但我想保持我现有的代码,如果可能的话。
首先,如果你真的关心性能,那么你应该传递引用,按值传递可能会变得非常昂贵,无论你使用默认的还是自定义的复制构造函数。
现在,如果你完全设置了按值传递内容和使用复制构造函数,我认为默认的复制构造函数很好,因为它为你照顾一切。如果可能的话,您应该尝试调整您的类,以便您可以继续使用它。
如果你的类有指针,那么一种方法是将它们包装在某种智能指针中。例如,如果您使用std::shared_ptr<SDL_Surface>
(或相同的boost::shared_ptr<SDL_Surface>
)代替SDL_Surface*
,则启用该指针被复制。shared_ptr类将在其上保留一个引用计数,并且只在所有引用都消失时删除表面。注意,如果采用这种方法,则需要为SDL_Surface使用自定义删除函数,如本问题所示。
相关文章:
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- Windows 7 应用程序在未聚焦时运行速度较慢
- 重新执行C++程序会加快速度
- 读/写 OpenMP 中的共享向量会减慢程序速度
- 相同的 c 和 c++ 程序之间的巨大速度差异
- JIT 编译器及其在 C++ 前面加快 .NET 中程序执行速度的好处
- 将统一的内存指针传递给内核会减慢程序的速度
- QWebView 用于在桌面应用程序中运行 javascript (D3) - 当 HTML 更改时重新加载速度很慢
- 多次调用函数是否会降低程序速度
- 如何在 Ubuntu 上提高我的程序磁盘读取速度
- 如何在不冻结线程/应用程序的情况下减慢方法执行速度
- 头文件是否会影响程序的内存或处理速度
- C 程序放慢迭代速度
- 在Visual Studio上运行时程序速度变慢
- 在不减慢主应用程序速度的情况下在后端运行成员函数的技巧是什么
- 访问对象的变量会减慢程序速度 (C++)
- C++11与OpenMP结合使用,可执行程序速度较慢
- 当用文字替换变量用法时,程序速度减慢了很多,为什么
- 通过回避函数来提高程序速度?(C++)
- TCLAP使多线程程序速度变慢