내가 형 B. 나는 다음과 같이이 일을하려고 한 방법의 포인터의 목록이 포함되어 내 클래스 A에 대한 복사 생성자를 만들려고하고의 목록 :C의 ++ 생성자를 복사 : 필드 포인터
class A
{
private:
list<B*> myList;
list<B*>::iterator iter;
public:
A()
{
}
// Copy constructor
A(const A &src)
{
myList.assign(src.myList.begin(), src.myList.end());
}
A& operator= (const A &src);
};
A& A::operator= (const A &src)
{
// do the copy
myList.assign(src.myList.begin(), src.myList.end());
// return the existing object
return *this;
}
A=a1;
//call function that will change a1
A a2(a1);
//call function that will change a1
그런 다음 A1 변경이 마지막 함수를 호출 한 후, 나는 A2가 너무 변경되었음을주의 사항 :
지금, 내 문제는 내가이 작업을 수행하는 경우이다. 복사 생성자가 이런 일이 발생하지 않도록해야한다고 생각했지만 코드에서 내가 뭘 잘못하고 있는지 알 수 없습니다.
"a1이 바뀌면 a2도 변경되었습니다." 목록에 포함 된 요소에 적용됩니까? 요소를 수정하면 다른 객체에서도 수정됩니다. – Jack
예, 의미는 – FranXh
전화 번호부에 마을의 모든 사람의 이름, 전화 번호 및 주소를 상상해보십시오. 이제 친구에게 전화 번호부의 사본 *을주었습니다. 어떤 방식 으로든 그의 전화 번호부에있는 "Bob Jones"는 귀하의 * 전화 번호부에있는 "Bob Jones"와는 다소 차이가 있습니까? 예, 포인터 목록의 복사본은 그 자리에 꽤 많이 있습니다. – WhozCraig