为什么c++ delete只能删除new操作返回的指针,不能删除用取地址符得到的指针?

如下:

class A{};
int main(){
    A* a=new A();
    delete a;
    return 0;
}

这样是没有问题的,但是下面这样会抛异常:

class A{};
int main(){
    A a=*new A();
    delete &a;
    return 0;
}

图片说明

请问这是什么原因,不都是释放指针指向的内存区域吗?

因为
A a,这在堆栈上定义了一个a对象实例
= *new A();
调用了拷贝构造函数
但是a还是堆栈上,而不是堆上那个分配的对象。
所以不能delete