我对这段代码有疑问......为什么要继续访问成员复印机
这是代码,这是一个名为string
的类的成员函数。
string operator +(string &r) {
char *k = NULL;
k = new char[strlen(this->getstring()) + strlen(r.getstring()) + 1];
strcpy(k, this->getstring());
strcat(k, r.getstring());
string Z = k;
delete[] k;
return Z; // visits MemberWise Copier then destructs..
}
这是我的成员复印机..
string(string &p) : s(NULL)
{
setstring(p.getstring());
}
答案 0 :(得分:0)
此代码调用string
类的copy-constructor,因为字符串Z
是按值返回的。如果是这样,将始终发生成员复制。
答案 1 :(得分:0)
按值返回:根据定义,这显然会调用复制构造函数(不“成员复制器”,因为C ++用语中没有这样的东西)。
所以一切都按照预期的方式进行。
如果您担心复制字符串的开销,请不要:所有现代编译器都会尽可能地优化此副本,以便按值返回安全有效(不是您有选择:语义这里要求按值返回。)