2011-12-21 63 views
0

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

+1

你为什么不测量它并告诉我们? – 2011-12-21 06:17:50

+0

显式拷贝构造函数有多强烈?管理性能的最大空间是拥有一个明确的拷贝构造函数。对默认没有什么魔力。 – wallyk 2011-12-21 06:18:12

+0

当然,在我写代码之前,我只是希望知道。另外,当我创建我的拷贝构造函数时,是否必须初始化所有变量或只是指针。如果我只是使用指针,其余的会自动复制? – Alidaco 2011-12-21 06:19:49

回答

2

首先,如果你真的关心性能,那么你应该四处传递引用,路过的值可以,如果你使用默认或自定义拷贝构造函数会非常昂贵,不管。

现在,如果你完全在按值传递的东西,并使用拷贝构造函数集,我觉得默认的拷贝构造函数是好的,因为它需要照顾一切为您服务。如果可能的话,你应该尝试调整你的课程,以便继续使用它。

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

+0

非常感谢。我将开始通过引用传递,并查看一些智能指针。 – Alidaco 2011-12-21 07:52:15