假设我有以下代码:
class ID {
ID (const std::string& name_, int n_) : name (name_), n(n_) {}
std::string name;
int n;
}
T* search_by_ID (const ID& id_);
每当我想调用search_by_ID
时,我需要构造一个临时ID对象(如果一个合适的对象尚未构造和可用),例如:
ptr=search_by_ID (ID (myname, number));
即使对象是在适当的位置构造的,它也涉及到字符串副本,这可能很慢。因此,定义新函数(或重载)似乎很方便:
T* search_by_ID (const std::string name, int number);
现在我可以执行搜索并且不会创建任何字符串副本。缺点是我必须重载search_by_ID
并且代码可能不那么容易或理解或清楚。
是否可以采用两种方法中的最佳方法?即阻止第一次调用创建字符串(myname)的副本。
答案 0 :(得分:0)
如果你多次调用该函数,并且总是使用相同的类,那么最好稍微更改一下类,而不是在里面存储std::string
,存储一个指针< / strong>到std::string
。这样,在使用构造函数时,您不必一直复制字符串。
如果您计划使用不同的课程,您可能会发现最好使用模板,并从您的功能中制作模板:
template <class myType>
T* search(myType &object);
当然,您也可以将两种解决方案结合起来。