我正在发送 HTTP 请求以在服务器上保存/更新数据。请求是异步发出的,并在完成时调用回调函数。一切正常,只是有时应用程序在回调中崩溃。
这就是我正在做的事情:
user = new User();
user->saveOnServer();
user->zombie = true; // Mark the user that it needs to be deleted in the callback.
在User
中,我有一个saveOnServer()
方法:
void User::saveOnServer(){
Request *request = new Request();
// Send request to the server and register the callback.
request ->setCallback(&userCallback, (void*)this);
}
回调:
void userCallback(void *data){
User *user = (User*)data;
// Do something here.
// Delete user if it's a zombie.
if(user->zombie)
delete user;
}
有时,我需要在向服务器发送请求后创建一个新用户:
user = new User();
user->saveOnServer();
user->zombie = true;
// Some code comes here.
if(user)
delete user;
user = new User();
问题是在这种情况下,应用程序在回调中删除用户时崩溃,因为它已经被删除了。另一个问题是回调删除了用户,但user
指针main
仍然指向某个地址(悬空指针),所以我再次尝试删除它。
我不确定在这种情况下管理内存的最佳方法是什么。我已经zombie
到位,因为在某些情况下我不希望回调删除用户。