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;}
翻阅古今
相关分类