我正在开发一个c ++应用程序.在我的代码中,我有一个像TestClass的对象指针*pObj = new TestClass(); 和成员函数调用如pObj-> close(); 在close()成员函数内部,我应该将pObj设为NULL.根据我们的要求,TestClass用户不应该在pObj上调用delete.(TestClass的析构函数是故意为此目的而私有的)另外,TestClass不应该公开任何静态方法来接收指针并使其为NULL.
一旦调用close(),还有其他方法可以使pObj为NULL吗?
我试过一种方法.在close()函数内部,我使用const_cast删除了此指针的constness.并参考了它.然后我做了这个= NULL.即使再调用一边,pObj指针值仍然存在.它没有设置为NULL.这可能是由于该指针的地址和pObj的地址不同.请帮忙.
编辑:对不起,我错过了什么.在一个名为init的静态函数中调用new.init函数如下所示.void init(TestClass*&pObj); 因此,TestClass用户首先调用init进行分配.但他不能叫deinit(不应该有任何这样的功能)实际上,这不是我的设计.当我进入这个项目时它出现了:(
Tad*_*pec 10
想象一下这样的代码:
TestClass *ptr1 = new TestClass();
TestClass *ptr2 = ptr1;
ptr2->close();
Run Code Online (Sandbox Code Playgroud)
您希望将哪个指针设置为null?在Inside close方法中,您没有信息指向您的对象有多少指针以及如何close访问方法.
考虑到你的约束,没有办法做你想做的事.
一个警告:如果您的类的用户在堆栈上的对象上创建会发生什么:TestClass test;?
还有一个问题,为什么你希望你的类的用户被迫调用new来分配你的类的对象,然后禁止调用delete.对我毫无意义.