use*_*815 -3 c++ pointers reference
有人可以帮我解决这个问题吗?
不删除在下面的行(*)上分配的内存.
void f() {
int z = *new int; // (*)
//...
}
Run Code Online (Sandbox Code Playgroud)
不改变行上的代码(*),有什么办法可以避免泄漏内存?如果是这样,怎么样?如果没有,为什么不呢?
我不明白的是,什么*new int意思?具体来说,添加*旁边的新意味着什么呢?
另外,如果不是int z,我们有int &z什么?
那条线是内存泄漏.在保存它的句柄(返回的地址)之前,int在堆上分配int并对其进行解析(带*)也是没有意义的new.因此,避免泄漏的唯一可行方法是:
return;
// your silly * line here
Run Code Online (Sandbox Code Playgroud)
不改变行上的代码(*),有什么办法可以避免泄漏内存?
在现实生活中,你绝对会改变那条线 - 这太疯狂了.
假设这是一项智力练习,那么可能性是:
return;在它之前添加,所以new永远不会发生;::operator new以返回可以通过其他方式访问的指针,例如全局变量.我不明白的是,什么
*new int意思?
new int动态分配一个类型的对象int,并给出一个指向它的指针.*取消引用指针,以便可以将对象复制到初始化z.指针不存储在任何地方,因此之后无法访问或删除动态对象.
此外,z从未初始化对象的值初始化会给出未定义的行为.
另外,如果不是
int z,我们有int &z什么?
z将是动态对象的引用,而不是副本.然后可以用它修复泄漏delete &z.这将是一个单一的,令人困惑的事情; 不要在实际代码中这样做.
通常,避免动态分配,并在必要时使用RAII类型管理动态资源,如容器和智能指针.原始指针容易出错,特别是在抛出异常时; 其他任何东西都是疯狂的秘诀.