为什么我不能访问我在堆上创建的对象?
Why can't I access the object I created on the heap?
我正在尝试学习 C++,但有一件事我不太清楚。我知道 new
运算符会在自由存储上创建一个对象,因此如果块中的对象是使用 new 创建的,则它不会在作用域结束后被销毁。但是在下面的示例中,我无法访问块后由 new 分配的对象。我在这里错过了什么?
#include <iostream>
int main(){
{double *d=new double{4};}
std::cout<<*d;
}
新对象没有销毁。但是指向它的唯一指针不见了,因为 it 被销毁了(除了拒绝您访问它之外,它对它指向的内容没有任何作用)。
您可以通过在块外部声明指针,同时仍在其中执行分配来查看分配如何在块中存活:
#include <iostream>
int main(){
double *d;
{d=new double{4};}
std::cout<<*d;
}
我正在尝试学习 C++,但有一件事我不太清楚。我知道 new
运算符会在自由存储上创建一个对象,因此如果块中的对象是使用 new 创建的,则它不会在作用域结束后被销毁。但是在下面的示例中,我无法访问块后由 new 分配的对象。我在这里错过了什么?
#include <iostream>
int main(){
{double *d=new double{4};}
std::cout<<*d;
}
新对象没有销毁。但是指向它的唯一指针不见了,因为 it 被销毁了(除了拒绝您访问它之外,它对它指向的内容没有任何作用)。
您可以通过在块外部声明指针,同时仍在其中执行分配来查看分配如何在块中存活:
#include <iostream>
int main(){
double *d;
{d=new double{4};}
std::cout<<*d;
}