아래와 같이 코드를 작성하면 a1 객체와 a2 객체가 서로 같은 int형에 대한 포인터 변수를 공유하기 때문에 이미 해제된걸 재해제 하기 때문이다.
#include <iostream>
using namespace std;
class A
{
int* ptr = nullptr;
public:
A()
{
ptr = new int();
}
A(const A& Ref)
{
this->ptr = Ref.ptr;
}
~A()
{
delete ptr;
}
};
int main()
{
// 기본 생성자 호출
A a1;
// 복사 생성자 호출
A a2(a1);
}
이를 해결하기 위해선 ptr를 참조 대상값 가지고서 재 할당 해줘야한다.
#include <iostream>
using namespace std;
class A
{
int* ptr = nullptr;
public:
A()
{
ptr = new int();
}
A(const A& Ref)
{
this->ptr = new int(*Ref.ptr);
}
~A()
{
cout << "소멸자 호출" << endl;
delete ptr;
}
public:
void Set(int Val)
{
*ptr = Val;
}
void Print()
{
cout << *ptr << endl;
}
};
int main()
{
A a1;
a1.Set(5);
A a2(a1);
a1.Print();
a2.Print();
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 가변 길이 배열 (Variable Length Array) (0) | 2022.08.02 |
---|---|
C/C++ 포인터 역참조 (deference) (0) | 2022.08.02 |
C++ 임시 객체 (Temporary Object) (0) | 2022.07.29 |
C++ 부모 클래스 함수 호출과 오버라이딩 (override) (0) | 2022.07.28 |
C++ 자기 자신 참조 (this) (0) | 2022.07.28 |