为什么C++方法不能返回一个解除引用的指针?

May*_*tBe 1 c++ dereference

我是C++(和学习Java)的新手.这是来自HW,但我认为我已经回答了硬件问题,我只是想更好地了解指针.

说我有以下方法:

int cubed(int a) {
  int * ptr;
  *ptr = a * a * a;
  return *ptr;
}
Run Code Online (Sandbox Code Playgroud)

这将编译并正常工作,具体如下:

int test = cubed(3);
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚为什么返回一个解除引用的指针是不好的.

这个问题说内存泄漏是一个问题,但我不确定为什么.也许是因为我不明白解除引用指针会发生什么.

左值是否只是在那个点无限期地挂了?你真的要删除指针吗?任何见解将不胜感激.

Lig*_*ica 8

你读的问题是不同的.说你有这个代码:

int cubed(int a) {
  int* ptr = new int;
  *ptr = a * a * a;
  return *ptr;
}
Run Code Online (Sandbox Code Playgroud)

现在,你将泄漏动态分配int,因为你将返回它的副本而不是delete原始副本.

你的代码实际上更糟糕了,因为new你只是通过一个未初始化的指针写入不属于你的内存,而不是分配.实际上,你正在写一个int不存在的东西.

应该做的是这样的:

constexpr int cubed(const int a)
{
   return a*a*a;
}
Run Code Online (Sandbox Code Playgroud)

或者只是std::pow(value, 3)在呼叫站点调用.