c++ - 如何在不显式设置、不显式删除和不使用静态函数的情况下使对象指针为 NULL?

标签 c++

我正在开发一个 C++ 应用程序。 在我的代码中,我有一个对象指针 TestClass *pObj = new TestClass(); 和成员函数调用,如 pObj->close(); 在 close() 成员函数中,我应该使 pObj 为 NULL。 根据我们的要求,TestClass 用户不应该在 pObj 上调用 delete。(为了这个目的,TestClass 的析构函数是私有(private)的) 此外,TestClass 不应公开任何静态方法来接收指针并将其设为 NULL。

有没有其他方法可以在调用 close() 后使 pObj 为 NULL?

我试过一种方法。 在 close() 函数中,我使用 const_cast 删除了该指针的常量性。 并引用了它。 然后我做了这个= NULL。 即使在调用端,pObj 指针值仍然存在。它没有设置为 NULL。 可能是因为this指针的Address和pObj的Address不一样。 请帮忙。

编辑:抱歉,我错过了一些东西。 new 在名为 init 的静态函数中被调用。初始化函数如下所示。 void init(TestClass *& pObj);所以TestClass用户首先调用init进行分配。但是他不能调用deinit(应该没有这样的函数) 其实这不是我的设计。当我进入这个项目时它就存在了:(

最佳答案

想象一下这样的代码:

TestClass *ptr1 = new TestClass();
TestClass *ptr2 = ptr1;
ptr2->close();

您想将哪个指针设置为空?在 close 方法中,您不知道有多少指针指向您的对象以及如何访问 close 方法。

关于c++ - 如何在不显式设置、不显式删除和不使用静态函数的情况下使对象指针为 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3509556/

相关文章:

c++ - 动态分配类,有继承问题

c++ - undefined symbol (CLSID_CMPEG2EncoderVideoDS)

c++ - 如何确保在完成写入之前不读取文件

c++ - 将短裤数组写入文件

c++ - 如何将 bool vector memcpy 到 char 数组?

c++ - 冒泡排序书名

c++ - 根据 C++ ISO 标准,什么是多次通过保证?

c++ - CSocket如何停止监听

c++ - 通过引用获取 std::list

c++ - 如何在我的项目中从cmake中的同一个项目中获取多个库