#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class Sample {
char* name;
public:
static int count;
Sample() {
cout << "생성자 호출 : " << this <<endl;
name = NULL;
count++;
}
Sample(const char* name) {
cout << "const char* name 생성자 호출 : " << this << endl;
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
count++;
}
~Sample() {
cout << "소멸자 호출 : " << this << endl;
delete[] name;
}
Sample(const Sample& a) {
cout << "복사 생성자 호출 : " << this << endl;
name = new char[strlen(a.name) + 1];
strcpy(name, a.name);
count++;
}
Sample& operator=(const Sample& a) {
delete[] name;
cout << "대입연산자 호출 " << endl;
name = new char[strlen(a.name) + 1];
strcpy(name, a.name);
return *this;
}
char* printName() { return name; }
int printCount() { return count; }
};
int Sample::count = 0;
int main() {
Sample a("Sample");
Sample b(a);
Sample c;
c = a;
cout << a.printName() << endl;
cout << b.printName() << endl;
cout << c.printName() << endl;
cout << "객체의 수 : " << a.printCount() << endl;
}
--------------------------------------------------------------------------------------------------
Sample()생성자를 없애고 디폴트 매개변수를 넣어서 하나로 합쳤는데 런타임에러 뜸.
Sample(const char* name = NULL) {
if(name == NULL) cout << "생성자 호출 : " << this << endl;
else cout << "const char* name 생성자 호출 : " << this << endl;
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
count++;
}
대체 무슨 차이가 있어서 첫 번째는 정상 실행되고 두 번째는 런타임에러뜨는거임?
모르긴몰라도 delete [] NULL 은 말이안뎀
오...이거같기도하다 답변 감사감사
소멸자 안에서 if ( name != NULL) delete[] name; 이렇게 바꿔봤는데도 안되긴하네 ㅠㅠ 다른문제인가봐
내가 봤을땐 기본 생성자랑 모호함이 생겨서 그런거인듯 new 클래스()로 해주면 안에 파라미터가 아예 안들어간건지 들어간건지 둘 중 무엇인지 모르는거 같음 기본 생성자 모든 내용 싹 지우고 중괄호 지우고 클래스() = delete; 해보셈
음.. 무슨말인지 잘..ㅠㅠ
해당 댓글은 삭제되었습니다.
그건 문제없어 iostream에 내재되어있다고 들음
해당 댓글은 삭제되었습니다.
두번째 코드로 돌려도 문제없음?ㄷㄷ 혹시 코드 복붙가능?