例如,假设我有一个游戏类:
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/