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

时间:2011-12-21 06:16:10

标签: c++ copy-constructor

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

1 个答案:

答案 0 :(得分:2)

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

现在,如果您完全按照值传递并使用复制构造函数设置,我认为默认的复制构造函数很好,因为它会为您处理所有事情。您应该尝试调整您的课程,以便在可能的情况下继续使用它。

如果你的类有指针,那么一种方法是将它们包装在某种智能指针中。例如,如果您使用SDL_Surface*(或std::shared_ptr<SDL_Surface>而不是boost::shared_ptr<SDL_Surface>而不是{{1}},那么您可以启用该指针进行复制。 shared_ptr类将在其上保留引用计数,并且仅在所有引用都消失时删除表面。请注意,如果您执行此方法,则需要为SDL_Surface使用自定义删除功能,如this question中所示。