繁体   English   中英

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM