|
먼저 답글에 감사 드립니다..
당연히 소멸자에서 Close()를 호출합니다.
소멸자에서는 아래와 같이 Close()외에는 아무것도 수행하지 않습니다.
//---------------------------------------------------------------------------
__fastcall CNiscaNet::~CNiscaNet(void)
{
if(m_ClientSocket)
{
if(m_ClientSocket->->Active) m_ClienSocket->Close();
delete m_ClientSocket;
}
}
delete를 하고 곧바로 new를 하게되면 TClientSocket의 생성자를 호출 한후 깜깜 무소식 상태가
되더군요..OTL
이의영 님이 쓰신 글 :
: 소멸자에서 바로 delete ClientSocket 하기 전에 ClientSocket->Close(); 을 먼저 호출해 보세요.
:
:
: 물소리 님이 쓰신 글 :
: : class A에서 TClientSocket을 멤버클래스로 가지고 있습니다
: : Class A생성자에서 TClientSocket을 생성(new)하고 Calss 소멸자에서 TClientSocket을 소멸(delete)하도록
: : 되어 있습니다.
: :
: : 폼에서는 Class A를 멤버로 가지고 있으면서 동적으로 생성해야만 합니다.
: : //-- Form생성자에서 m_A에 NULL값으로 초기화 한 후
: : A* m_A == NULL;
: : 특정 함수에서는 다음과 같이 코딩하였습니다
: :
: : if(m_A) delete m_A;
: : m_A = new A;
: :
: : 위의 내용은 A클래스가 이미 생성되어 있으면 delete한 후 새로이 new를 해야하는 상황입니다.
: : 그런데 위의 내용이 실행 될때는 첫번째는 정상 작동 되는데...다시 그 함수를 수행하게 되면
: :
: : 다운되는 현상이 발생합니다.
: : 추측하건데 delete ClientSocket을 실행하면 TClientSocket이 완전히 소멸된 후 리턴되는 것이 아니라
: : Socket관련 소멸자가 쓰레드로 따로 돌면서 소멸이 되는것으로 추측됩니다.
: : 따라서 delete m_A; 후 바로 new를 하게 되면 TClientSocket이 소멸되는 사이에 기존 포인터에 새로운
: : ClientSocket이 생성되면서 다운 현상이 나는 것으로 추정됩니다.
: :
: : 따라서 ClientSocket의 소멸자가 완전히 소멸되었는지를 확인할 수 있는 방법을 알고 싶습니다.
: : 그러면 위와 같은 문제가 해결 될것으로 생각됩니다..
: :
: : 고수님들의 조언 부탁드립니다.
|