SystemAbilityManagerClient& SystemAbilityManagerClient::GetInstance()
{
static auto instance = new SystemAbilityManagerClient();
return *instance;
}
这个是单例模式吗?如果是请解释为什么?
这是单例模式。当第一次调用SystemAbilityManagerClient::GetInstance()
时,初始化静态变量instance
创建一个SystemAbilityManagerClient
对象。之后再调用SystemAbilityManagerClient::GetInstance()
就直接返回instance
所指的对象。
另外支持C++11的编译器,可以直接这样写
SystemAbilityManagerClient& SystemAbilityManagerClient::GetInstance()
{
static SystemAbilityManagerClient instance;
return instance;
}
程序结束后,所有new出来的对象,即使没被delete,也会被自动释放,而static标志着这个变量生存周期一直到程序结束,所以不delete也无所谓。所谓必须delete,是保证在大项目中,程序还没结束内存就用完了,所以要及时delete,而对于某些一直需要用的对象,不delete也行
static auto instance = new SystemAbilityManagerClient();
不是说c语言中new的对象都要用delete释放吗,为什么这个对象不需要用delete释放。