에서 포인터를 자유롭게 :코드를 감안할 때 다른 함수
#include<iostream>
using namespace std;
class String
{
char *pstr;
unsigned size;
public:
String(){ pstr=0;size=0;}
String(const char *);
void show(){ cout << pstr << endl ; }
~String() { cout << "In Dtor" << endl; delete [] pstr; }
};
String::String(const char * cptr)
{
size = strlen (cptr) + 1;
cout << "String is - " << cptr << " - of size " << size - 1 << endl ;
pstr = new char [ size ] ;
for (int i = 0 ; i < size ; i++)
pstr[ i ] = cptr [ i ];
}
int main()
{
String s("Hello World");
s.show();
s.~String();
}
출력 :
String is - Hello World - of size 11
Hello World
In Dtor
----Debug Assertion Failure----
In Dtor
왜 소멸자가 다시 호출 나올까요? 소멸자를 호출했을 때?
그리고 어설 션 오류 란 무엇입니까?
또한이 코드는 유효합니까?
char * ptr=0;
void fun()
{
const char * p = "Hello World";
int size = strlen(p)+ 1;
cout << size << endl;
ptr = (char *)malloc(size);
for (int i = 0 ; i < size ; i++)
ptr[ i ] = p [ i ];
cout << p << endl << ptr << endl ;
}
int main()
{
fun();
free (ptr); --> Note
}
포인터를 다른 기능에서 해제 할 수 있습니까? 이것이 내가 여기서 이해하려고하는 주요한 것입니다.
소멸자에 대한 명시 적 호출이 필요하지 않은 경우, 무료 저장소를 사용하고 있지 않습니다. – DumbCoder
@DumbCoder : 힙을 사용하는 경우에도 명시 적으로 소멸자를 호출하지 않습니다. 당신은 단지'delete'를 호출합니다. – Xeo
@Acme : 편집 중 : 예, 할 수는 있지만 실제로는 같은 질문에 속하지 않습니다. 또한, 나는 그것이 전에 대답되었습니다 : 확신하기 전에 검색! – Xeo