C++クイズでこの質問(初心者C++)がありました:私の答えは間違っていました。正解の背後にある説明を理解したい-「未定義の動作」
質問: 関数 foo() が戻った後、次のコードで何が起こりますか?
class base
{
public:
base() { }
~base() { }
};
class derived : public base
{
private:
int *p_pi_values;
public:
derived() : p_pi_values(new int[100]) { }
~derived() { delete [] p_pi_values; }
};
void foo(void)
{
derived *p_derived = new derived();
base *p_base = p_derived;
// Do some other stuff here.
delete p_base;
}
私はこの答えを出しましたが、間違っていることがわかりました ==> 整数配列は適切に削除されません。
正解 ==> 動作は未定義です。