ここで簡単な質問です。コードにいくつかのクラスがありますが、そのうちの1つだけがこの問題を示しており、私は一生の間その理由を理解できません。クラスのインスタンスを作成すると、直後にデストラクタが呼び出されますが、クラスのインスタンスは実際には削除されていないように見えます。
クラスのインスタンスに影響を与えるデストラクタにdelete[]操作がなければ、私はそれを受け入れることができるかもしれません。
「三つのルール」などについてどこかで読んだので、何が欠けているのか見てみました。私はすでにデフォルトのコンストラクターとユーザー定義のコンストラクターを持っています。次に、コピーコンストラクターと呼ばれるものを追加しました。次のようなものです。
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