我需要创建一个类,其对象可以初始化但不能分配.
我想也许我可以通过不定义赋值运算符来做到这一点,但编译器使用构造函数来进行赋值.
我需要它是这样的:
Object a=1; // OK
a=1; // Error
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
阅读了很多关于这个众所周知的问题,我发现并使用了"首次使用时创建",但主要问题是它会产生内存泄漏.
工作了一下,我做了一些轻微修改试图解决这个问题,我得到了一个解决方案:
1)使用全局静态指针代替本地静态指针
2)使用单独的函数删除对象.
例:
static myObject* myObjectPtr=nullptr;
static myObjectDel() {delete myObjectPtr;}
inline myObject& myObjectRef()
{
if(myObjectPtr==nullptr)
{
myObjectPtr=new myObjectPtr;
atexit(myObjectDel);
}
return(*myObjectPtr);
}
Run Code Online (Sandbox Code Playgroud)
所以,我可以确保:
1)在首次使用之前创建对象.
2)上次使用后删除对象.
3)没有内存泄漏.
它适用于MS Visual Studio 2013,因为静态指针在程序启动时是零初始化的,但我不确定所有编译器和操作系统是否都这样做.
换句话说,它是便携式的吗?
谢谢你,抱歉我的英语不好(我不是英国人)