将动态创建的对象分配给作为类的私有成员的指针有什么问题吗?

Mic*_*ron 0 c++ pointers memory-leaks memory-management dynamic

例如,假设我有一个Game类:

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

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

    void ShowMainScreen();

    Winsock* CreateWinsock();

    MessageLog* CreateMessageLog();

    D2DResources* CreateD2DResources(HWND);

    HWND Getm_hWnd();

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

private:
    HWND m_hWnd;

};
Run Code Online (Sandbox Code Playgroud)

而Game中的3个指针分配如下:

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

    return pWinsock;
}
Run Code Online (Sandbox Code Playgroud)

这会导致任何问题吗?另外,我会删除动态创建的对象,如下所示:delete pWinsock;?

Jos*_*eld 5

pWinsock是一个公共成员,但不管怎样,这都没有错.两者pWinsock和函数的指针返回值都指向动态分配的Winsock对象.只要你delete在某个时刻对象,你就没有内存泄漏.

这里唯一的问题是这个函数的客户端可能delete是指针本身,而你的Game对象可能依赖pWinsock指针在特定的持续时间内有效(可能是它的整个生命周期).您可以使用智能指针最好地表达您的意图.A std::shared_ptr<Winsock>在这里是一个不错的选择,因为您的Game对象创建了Winsock然后与客户共享所有权.