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;?
pWinsock是一个公共成员,但不管怎样,这都没有错.两者pWinsock和函数的指针返回值都指向动态分配的Winsock对象.只要你delete在某个时刻对象,你就没有内存泄漏.
这里唯一的问题是这个函数的客户端可能delete是指针本身,而你的Game对象可能依赖pWinsock指针在特定的持续时间内有效(可能是它的整个生命周期).您可以使用智能指针最好地表达您的意图.A std::shared_ptr<Winsock>在这里是一个不错的选择,因为您的Game对象创建了Winsock然后与客户共享所有权.