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

标签 c++ pointers memory-management dynamic memory-leaks

例如,假设我有一个游戏类:

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;

};

Game 中的 3 个指针是这样分配的:

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

    return pWinsock;
}

这会造成什么问题吗?另外,我是否会像这样删除动态创建的对象:delete pWinsock;?

最佳答案

pWinsock是公共(public)成员,但无论哪种方式都没有错。两者 pWinsock和函数的指针返回值指向动态分配的Winsock目的。只要你delete某个时候的对象,你没有内存泄漏。

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

关于c++ - 将动态创建的对象分配给作为类的私有(private)成员的指针有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487867/

相关文章:

c++ - std::ifstream 初始值在未初始化时检查为真

c - 为什么我的 char * 返回不同的值?

c++ - 这个 auto_ptr 程序是如何工作的,它做了什么?

c++ - 别名的别名?

c++ - cv::flann::knnSearch 返回的距离单位是什么?

c++ - 如何在迭代 boost::intrusive::list 时删除

C++ 使用指针复制 char*

c++ - 我可以在构造函数调用之前设置成员变量吗?

memory-management - 按引用调用和按值返回调用有什么区别

c - 你如何管理 C 中结构的内存?