如何在没有显式设置的情况下使对象指针为NULL,而不显式删除和没有静态函数?

bjs*_*123 1 c++

我正在开发一个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访问方法.


Did*_*set 8

考虑到你的约束,没有办法做你想做的事.

一个警告:如果您的类的用户在堆栈上的对象上创建会发生什么:TestClass test;

还有一个问题,为什么你希望你的类的用户被迫调用new来分配你的类的对象,然后禁止调用delete.对我毫无意义.

  • 这个`init`函数打破了你自己的约束,因为它必须是一个静态成员函数(或自由函数),我想.你可以用相同的方式定义`close`:作为静态成员函数或作为自由函数.实质上,您必须在创建和删除事物时使用相同的范例. (5认同)