C ++ STL содержит или хранит класс, который перегружает operator = - PullRequest
1 голос
/ 14 декабря 2011

source

#include <iostream>
#include <vector>
#include <string>

class A
{
public:
    std::string name;
    int value;
    A& operator = (const A& from) { value=from.value; return *this; }
    A(std::string a_name, int a_val) { name=a_name; value=a_val; }
};

int main()
{    
    std::vector<A> va;
    va.push_back(A("first",1));
    va.push_back(A("second",2));

    std::vector<A> vb;
    vb.push_back(A("third",3));
    vb.push_back(A("fourth",4));

    va = vb;   //point T

    return 0;

}

В точке T , std :: vector :: operator = вызывает перегруженный оператор каждого сохраненного члена A:: operator =

результат не тот, который я хотел.

Мой ожидаемый результат таков:после точка T член va точно такой же, как vb va [0] .name - «третий», а va [1] .value - «четвертый».но результатом будет только копирование значения (поскольку A :: operator = копирует только A :: value )в моем проекте A :: operator = нельзя изменить, потому что он уже использовал много других кодов.но я хочу использовать также std :: container :: operator = .не использует указанные функции копирования.каким способом это можно сделать?

1 Ответ

4 голосов
/ 14 декабря 2011

Это ваша ответственность за реализацию оператора присваивания таким образом, чтобы после присвоения a = b; объект a имел ту же семантику, что и объект b.

Если вы действительно не можете этого сделать, то, возможно, вы можете положиться на неявно определенный конструктор копирования:

std::vector<A>(vb).swap(va);
//   ^^^^^^^^^^^^^
//    copy of vb
...