当前位置:  开发笔记 > 编程语言 > 正文

初始化命令惨败的可能解决方案?

如何解决《初始化命令惨败的可能解决方案?》经验,为你挑选了1个好方法。

阅读了很多关于这个众所周知的问题,我发现并使用了"首次使用时创建",但主要问题是它会产生内存泄漏.

工作了一下,我做了一些轻微修改试图解决这个问题,我得到了一个解决方案:

1)使用全局静态指针代替本地静态指针

2)使用单独的函数删除对象.

例:

static myObject* myObjectPtr=nullptr;

static myObjectDel() {delete myObjectPtr;}

inline myObject& myObjectRef()
{
  if(myObjectPtr==nullptr)
  {
    myObjectPtr=new myObjectPtr;
    atexit(myObjectDel);
  }

  return(*myObjectPtr);
}

所以,我可以确保:

1)在首次使用之前创建对象.

2)上次使用后删除对象.

3)没有内存泄漏.

它适用于MS Visual Studio 2013,因为静态指针在程序启动时是零初始化的,但我不确定所有编译器和操作系统是否都这样做.

换句话说,它是便携式的吗?

谢谢你,抱歉我的英语不好(我不是英国人)



1> molbdnilo..:

您的解决方案是可移植的,但它不是线程安全的.
它也是不必要的复杂.

不要使用动态分配:

inline myObject& myObjectRef()
{
    static myObject theObject;
    return theObject;
}

无泄漏(自时间开始)和线程安全(自C++ 11以来).

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有