【发布时间】:2011-10-28 06:51:12
【问题描述】:
myClassVar = MyClass(3);
我希望在左侧之前创建的 myClassVar 上调用析构函数。
但它实际上是在 MyClass(3) 创建的新对象上调用的。
我的完整测试代码和输出如下..
编辑
我该如何解决这个问题?
实现赋值运算符?
MyClass其实有指针,还有MYSQL_STMT*,不知该如何处理MYSQL_STMT*变量。
我只需要 MyClassVar(3) 对象,而不是在创建 ClientClass 对象时首先创建的 MyClassVar()。
我经常遇到这种情况,想知道是否有好的方法。
#include <stdio.h>
class MyClass
{
public:
MyClass() { printf("MyClass %p\n", this); }
MyClass(int a) { printf("Myclass(int) %p\n", this); }
~MyClass() { printf("~MyClass %p\n", this); }
private:
int mA;
};
class ClientClass
{
public:
void Foo()
{
printf("before &myClassVar : %p\n", &myClassVar);
myClassVar = MyClass(3); // this is the important line
printf("after &myClassVar : %p\n", &myClassVar);
}
private:
MyClass myClassVar;
};
int main()
{
ClientClass c;
c.Foo();
return 0;
}
MyClass 0x7fff5fbfeba0
before &myClassVar : 0x7fff5fbfeba0
Myclass(int) 0x7fff5fbfeb70
~MyClass 0x7fff5fbfeb70 // <--- here destructor is called on the newly created object
after &myClassVar : 0x7fff5fbfeba0
~MyClass 0x7fff5fbfeba0
【问题讨论】:
-
我已经编辑了我的答案以解决您的编辑问题。
标签: c++ variable-assignment destructor