다음 코드 부분은 사용자 정의 데이터 형식이 String
입니다.이 클래스의 객체는 문자 포인터 str
(짧은 문자열)과 length
을 저장합니다.C++에서 소멸자 호출
#include<iostream>
#include<cstring>
using namespace std;
class String
{
char* str;
int length;
public:
String(){} //default constructor
String(const char* s)
{
length=strlen(s);
str=new char[length+1];
strcpy(str,s);
}
void add(String a,String b) //function to concatenate strings
{
length=a.length+b.length;
str=new char[length+1];
strcpy(str,a.str);
strcat(str,b.str);
}
void display()
{
cout<<str<<endl;
}
~String() //destructor
{
delete str;
cout<<"Destructor invoked!";
}
};
int main()
{
String s1;
String s2("Well done!");
String s3("Boy");
s1.add(s2,s3);
s1.display();
s2.display();
s3.display();
}
출력 : 소멸자 invoked.Why이입니다 얻을 display
기능 이전에도 호출되는 것처럼
Destructor invoked!Destructor invoked!Well done!boy
X!!;
<!!;
Destructor invoked!Destructor invoked!Destructor invoked!
- 이 나타 납니까? 소멸자 함수가 정의되지 않은 경우 (예상대로)
, 나는 다음과 같은 출력을 얻을 :
Well done!boy
Well done!
boy
- 왜 소멸자를 정의에 따라 예상치 못한 출력은?
소멸자는 'add'인수가 소멸되기 때문에 호출됩니다. – MikeCAT
그리고 귀하의 클래스는 3의 규칙을 준수하지 않습니다. 최소한 생성자 복사 및 대입 연산자를 복사해야합니다. –
메모리 누수 * 및 * 이중 삭제가 모두 있습니다. 'add', 그리고 [three of rule은 무엇입니까?] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)를보십시오. – juanchopanza