【发布时间】:2025-12-06 16:00:01
【问题描述】:
如果我有以下示例:
test.h
class MyClass
{
public:
MyClass();
std::string name1;
std::string name2;
std::string type1;
std::string type2;
void method1(MyClass &obj1);
void method2(MyClass &obj2);
}
test.cpp
MyClass *mainObject = new MyClass();
MyClass::MyClass()
{
}
void MyClass::method1((MyClass &obj1)
{
//do stuff
mainObject=&obj1; //we populate some of the MyClass variables
}
void MyClass::method2((MyClass &obj2)
{
//do stuff
mainObject=&obj2; //we populate the rest of MyClass variables
}
什么时候应该删除 test.cpp 中的 mainObject?我应该创建一个析构函数以便客户端删除它吗?
【问题讨论】:
-
您的代码没有任何意义。您正在创建一个全局堆分配的
MyClass对象,然后通过非静态成员函数对其进行修改。这是一个巨大的内存泄漏。你想在这里做什么? -
我想要一个 MyClass 类的实例,它会在不同方法的编译过程中被修改,并且每次都会更新。所以每次我呼吁一个新方法 mainObect 总是有最后一次更新
-
代码很可疑。在
MyClass::method1中,您有两个 对象。有obj1,也有*this。从这个角度来看,“一些 MyClass 变量”的评论没有意义。两个对象都有自己的变量。 -
@sunset:但是你涉及到三个对象!你有
mainObject指向的对象,你有你正在调用method1()的对象,你有obj1。 -
我应该用 MyClass mainObject 更改 mainObject 指针吗?在这种情况下,我想不会有内存泄漏。对吗?