程序中断时析构函数调用

时间:2016-04-02 16:54:43

标签: c++

我正在使用我制作的类http://localhost:8080/SimpleRestApi/api/courses 在程序中创建套接字连接。程序在无限循环中运行并退出它我使用ctrl-c。现在当我关闭程序时,我的析构函数没有被调用(内存释放,因为我已经读过here但是在中断程序时没有释放套接字)。有没有办法调用析构函数退出这样的程序?

套接字类定义:

Socket

析构函数定义:

class Socket
{
        private:
                int m_sock;
                sockaddr_in m_addr;
        public:
                Socket();
                virtual ~Socket();

                // Server initialization
                bool create();
                bool bind ( const int port );
                bool listen() const;
                bool accept ( Socket& ) const;

                // Client initialization
                bool connect ( const std::string host, const int port );

                // Data Transimission
                bool send ( const std::string ) const;
                int recv ( std::string& ) const;

                void set_non_blocking ( const bool );

                bool is_valid() const { return m_sock != -1; }
};

主要功能:

Socket::~Socket(){
      close(m_sock);
}

1 个答案:

答案 0 :(得分:2)

是的,您可以为SIGINT设置信号处理程序(单击CTRL-C时生成的信号)。 使用C ++标准库,您可以编写:

void close_connection(int signal)
{
  delete socket; // invoke destructor
  socket.close(); // Alternative, you can add a close method to your socket class
}

// Install a signal handler
std::signal(SIGINT, close_connection);

您可以在此处找到有关如何使用C ++管理信号的更多信息 http://en.cppreference.com/w/cpp/utility/program/signal