这里有一个简单的问题,我的代码中有几个类,但只有一个表现出这个问题,我一生都无法弄清楚为什么。当我创建类的实例时,析构函数被立即调用,但类的实例实际上并没有被删除。
如果在析构函数中没有删除 [] 操作会影响类的实例,也许我可以忍受。
我在某处读到了“三法则”之类的东西,所以试图看看我错过了什么。我已经有一个默认构造函数以及一个用户定义的构造函数。然后我添加了我认为所谓的复制构造函数,如下所示:
MyClass::MyClass(const MyClass &duplicate)
{
variable1 = duplicate.variable1;
variable2 = duplicate.variable2;
// etc
}
我在这里缺少什么可能导致此问题?
编辑:请求的代码。我已经重命名了所有内容,以便一切都清楚(此代码仍然与问题一起编译)。首先,头文件,MyClass.h
:
#ifndef MYCLASS_H
#define MYCLASS_H
#ifndef UNICODE
#define UNICODE
#endif
#include <string>
class MyClass
{
public:
MyClass();
MyClass::MyClass(const MyClass &);
MyClass(int, std::wstring inputWord, int);
~MyClass();
int intOne;
int intTwo;
};
#endif
下一个MyClass.cpp
:
#include "MyClass.h"
#include <Windows.h>
MyClass::MyClass(const MyClass &duplicate)
{
intOne = duplicate.intOne;
intTwo = duplicate.intTwo;
}
MyClass::MyClass()
{
}
MyClass::~MyClass()
{
MessageBox(NULL, TEXT("TEST"), TEXT("TEST"),0);
}
MyClass::MyClass(int intOneInput, std::wstring stringInput, int intTwoInput)
{
intOne = intOneInput;
intTwo = intTwoInput;
}
最后是我如何创建我的对象:
MyClass test(0, TEXT("TEST"), 0);
[复制自op的评论]
实际上,从我的最后一条评论开始,解构器不会用该特定行调用(直到它超出范围),该行被words.push_back(MyClass(0, TEXT("TEST"), 0));
声明为std::vector<MyClass> words