0

我对这段代码有疑问...为什么它一直访问会员复印机

这是代码,这是一个名为 的类的成员函数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());
}
4

2 回答 2

0

此代码调用您的string类的复制构造函数,因为字符串Z是按值返回的。在这种情况下,将始终发生成员副本。

于 2013-03-09T18:37:46.943 回答
0

您按值返回:根据定义,这显然调用了复制构造函数(而不是“成员复制器”,因为在 C++ 用语中不存在这样的东西)。

所以一切都是它应该的样子。

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

于 2013-03-09T18:37:54.650 回答