2008년 04월 20일
[열혈강의C++]5장 복사생성자
음 한마디로 생성자에 대입연산자를 써서 생성자의 멤버들을 모두 mov하겠다는 의미인데...
여기서 문제되는것은 동적할당을 했을경우이다
밑에 소스를 보면 알겠지만
처음 생성자를 호출하면 디폴트 생성자가 호출이 된다 여기서 동적으로 맴버들을 할당해주고
틸드 생성자에서 메모리 해제를 하면 되는데...
가령 하나의 생성자에 또다른 생성자를 대입해주면
이미 두번째(스택 상황상 생성자는 꺼꾸로 소멸) 생성자에서 동적할당된 멤버들이 사라진뒤
첫번째 생성자의 멤버들을 없앨려고 하니깐 런타임 에러...
이런걸 디폴트 생성자에서 다시금 동적으로 정의 해줘야 한다...
복사생성자 호출 형태 3가지
case1
-기존에 생성된 객체로 새로운 객체 초기화
case2
-함수 호출 시 객체를 값에 전달
case3
-함수 내에서 객체를 값에 의해 리턴
사실 case2와 case3는 거의 같은말
밑에 소스는 case1에 해당
/*
CopyCon4.cpp
*/
#include <iostream>
using std::cout;
using std::endl;
class Person
{
char *name;
char *phone;
int age;
public:
Person(char *_name,char *_phone,int _age);
Person(const Person &p){
name=new char[strlen(p.name)+1];
strcpy(name,p.name);
phone = new char[strlen(p.phone)+1];
strcpy(phone,p.phone);
age = p.age;
}
~Person();
void ShowData();
};
Person::Person(char *_name,char *_phone,int _age)
{
name = new char[strlen(_name)+1];
strcpy(name,_name);
phone = new char[strlen(_phone)+1];
strcpy(phone,_phone);
age = _age;
}
Person::~Person()
{
delete []name;
delete []phone;
}
void Person::ShowData()
{
cout<<"name : "<<name<<endl;
cout<<"phone : "<<phone<<endl;
cout<<"age : "<<age<<endl;
}
int main()
{
Person p1("KIM","013-333-5555",22);
Person p2=p1;
p2.ShowData();
return 0;
}

이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- [닷넷,ASP,C#,.net]Static 키워드와 생성자에 대한 설명 by ITMAINA
- 4월 4일 c++ by 소심장이쩡
- 4월 7일 _ 오전_복사 생성자 by 소심장이쩡
- Class by 낮해밤달
- 잠시 쉬어가는 .. <생성자> by 초랭
# by | 2008/04/20 22:35 | c++ | 트랙백





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]