成员复印机

时间:2013-03-09 17:57:13

标签: c++ operator-overloading return

我对这段代码有疑问......为什么要继续访问成员复印机

这是代码,这是一个名为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());
}

2 个答案:

答案 0 :(得分:0)

此代码调用string类的copy-constructor,因为字符串Z是按值返回的。如果是这样,将始终发生成员复制。

答案 1 :(得分:0)

按值返回:根据定义,这显然会调用复制构造函数(“成员复制器”,因为C ++用语中没有这样的东西)。

所以一切都按照预期的方式进行。

如果您担心复制字符串的开销,请不要:所有现代编译器都会尽可能地优化此副本,以便按值返回安全有效(不是您有选择:语义这里要求按值返回。)