クラスAの派生であるクラスBの配列を動的に作って、それをクラスAのポインタに渡してdeleteするとVC++でLNK2005エラーが出てくるのですが、その原因がよくわかりません。
以下にコードを書きます。
コードタグで囲ませていただきました。 by softya(ソフト屋)
// A.h
#ifndef A_H
#define A_H
class A{
public:
A();
virtual ~A();
};
#endif
// B.h
#ifndef B_H
#define B_H
#include "A.h"
class B : public A{
public:
B();
~B();
};
#endif
// A.cpp
#include "A.h"
#include <iostream>
using namespace std;
A::A(){
cout << "A" << endl;
}
A::~A(){
cout << "~A" << endl;
}
// B.cpp
#include "B.h"
#include <iostream>
using namespace std;
B::B(){
cout << "B" << endl;
}
B::~B(){
cout << "~B" << endl;
}
// Main.cpp
#include "B.h"
#include <iostream>
using namespace std;
int main(){
A* tmp = new B[2];
delete[] tmp;
}
こちらではコンパイルは通ったのですが、実行結果が
A
B
A
B
~A
~A
となってクラスBのデストラクタが呼ばれませんでした。
メイン関数内の、
A* tmp = new B[2];
delete[] tmp;
という部分を配列ではなく、
A* tmp = new B;
delete tmp;
とすると、当たり前ですがきちんとBのデストラクタも呼ばれうまくいきます。
どうしてこういう結果になるのかわかりません。
どなたかご教授ください。
よろしくお願い致しますm(_ _)m