0

这是否会导致内存泄漏,因为 pWinsock 没有在函数内被删除?

Winsock* CreateWinsock()
{
    Winsock* pWinsock=new Winsock;

    return pWinsock;
}

编辑:实际上,我无法删除我的指针,因为它是 Game (pWinsock) 的成员,它在上面的代码中接收了新创建的 Winsock。这有什么问题吗?

class Game{
public:
    Game();
    ~Game();

    void CreateWindowClass(HINSTANCE);
    void CreateRessources(HINSTANCE);

    void ShowLoginScreen();

    HWND Getm_hWnd();

public:
    D2DResources* pD2DResources;
    Winsock* pWinsock;
    MessageLog* pMessageLog;

private:
    HWND m_hWnd;
};
4

3 回答 3

2
于 2013-03-17T18:42:22.590 回答
0

如果这个函数的调用者在使用后删除了指针,就没有泄漏。因此,仅给出这段代码就无法评论内存泄漏。

要避免调用者忘记删除对象的这种情况,请使用共享指针或其他智能指针

于 2013-03-17T18:43:20.630 回答
0

不,所做的只是将指针传回给 Winsock。例如

Winsock* ws = CreateWinsock();
ws->doSomething();
//......
//some more stuff
//......
//Finished using Winsock
delete ws;

如果在您使用完 Winsock 后没有在那里调用 delete,那么这将被视为内存泄漏,因为当 Winsock 不再使用时,内存将被占用。

于 2013-03-17T18:44:26.823 回答