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 に答える