SocketAction* UDPSocket=new SocketAction();我用gdb跟蹤這一句,剛剛執行完構造函數的最后一句就直接進入析構函數了。然后我用gdb 命令p *UDPScoket之后就都成空的了。 我是用new開辟的空間,我的這個類里面構造函數里面調用了這個類的靜態成員函數。是不是這個原因? 我的構造函數是這樣的。SocketAction::SocketAction() { // TODO Auto-generated constructor stub int fd; SocketAction::CreatSocket(fd); SocketAction(fd, SocketAction::GetAClientAddr("127.0.0.1"));}SocketAction::SocketAction(int fd, struct sockaddr_in *Client) { this->c_fd = fd; this->Port = 8888; this->InitAddr(this->Server); this->Client = *((sockaddr*) Client); this->Action_bind(); this->recv_len = 0;}兩個靜態成員函數是這樣的。//第一個靜態成員函數bool SocketAction::CreatSocket(int &fd) { fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd == -1) { perror("had some err for create socket"); exit(1); } return true;}//分割行struct sockaddr_in* SocketAction::GetAClientAddr(const char* IPNum) { struct sockaddr_in* TempAddr = new sockaddr_in; TempAddr->sin_family = AF_INET; TempAddr->sin_port = 8888; TempAddr->sin_addr.s_addr = inet_addr(IPNum); return TempAddr;}
到底是什么情況?為什么我的對象老是自動銷毀???
慕桂英4014372
2023-02-17 22:18:02