提问者:小点点

为什么或者何时用指针声明int?[副本]


除了持续时间之外,这两者之间还有什么不同吗?

int ptr;
int *ptr = new int;

我理解指针的概念,但我看不出用指针对int进行delcaring有多大用处。


共2个答案

匿名用户

如果在创建对象的作用域之外不需要该对象,则可以使用堆栈上的对象。

示例:

int foo(int in)
{
   int i = in + 2;
   return i;
}

外部不需要。因此,您在堆栈上创建一个对象并返回它的值。

如果需要在创建对象的作用域之外的对象,则可以使用堆上的对象。

int* foo(int in)
{
   int* ip = new int(in + 2);
   return ip;
}

所指向的指针是从返回的,预期将由调用函数使用。因此,您需要在堆上创建一个对象并返回它。

这是概念上的区别。通常,如果您讨论的是,则不需要使用堆中的对象。当您需要返回数组时,这种差异变得很重要。

int* foo()
{
   int arr[] = {1, 2, 3, 4};
   return arr;
}

该函数将是一个问题,因为它返回的指针一旦函数返回就会无效。

int* foo()
{
   int* arr = new int[4]{1, 2, 3, 4};
   return arr;
}

这将起作用,因为即使在函数返回之后,返回的指针仍将指向有效的对象。调用函数必须负责释放内存。

匿名用户

从性能的角度可以看出差别。

考虑最坏的情况:

在本例中,所有所需内存将位于同一页上。

在这种情况下,的地址可以在一个页面上,而它所指向的内存可以在不同的页面上,这可能在间接访问内存时导致页面错误,即