非默认复制构造函数会减慢程序的速度吗?

Will a non-default copy constructor slow my program down?

本文关键字:程序 速度 默认 复制 构造函数      更新时间:2023-10-16

我有一个名为Texture的类,它有一个指向SDL_Surface的指针。当我想将它添加到一个向量时,我需要有一个非默认的复制构造函数,以防止在原始值超出作用域时出现问题。我知道只要对象按值传递给函数,就会调用复制构造函数。每一帧通过值传递许多纹理对象给我的渲染函数会导致我的程序变慢吗?我知道我可以通过引用来避免这个问题,但我想保持我现有的代码,如果可能的话。

首先,如果你真的关心性能,那么你应该传递引用,按值传递可能会变得非常昂贵,无论你使用默认的还是自定义的复制构造函数。

现在,如果你完全设置了按值传递内容和使用复制构造函数,我认为默认的复制构造函数很好,因为它为你照顾一切。如果可能的话,您应该尝试调整您的类,以便您可以继续使用它。

如果你的类有指针,那么一种方法是将它们包装在某种智能指针中。例如,如果您使用std::shared_ptr<SDL_Surface>(或相同的boost::shared_ptr<SDL_Surface>)代替SDL_Surface*,则启用该指针被复制。shared_ptr类将在其上保留一个引用计数,并且只在所有引用都消失时删除表面。注意,如果采用这种方法,则需要为SDL_Surface使用自定义删除函数,如本问题所示。