何时或为什么要声明指向 int 的指针?

11 浏览
0 Comments

何时或为什么要声明指向 int 的指针?

这个问题已经有了答案:

为什么我应该使用指针而不是对象本身?

除了它们的持续时间之外,它们之间有什么区别吗?

int ptr;
int *ptr = new int;

我理解指针的概念,但是我不认为声明一个带指针的int会有很多用处。

admin 更改状态以发布 2023年5月22日
0
0 Comments

从性能角度来看,可以看到差异。

考虑最坏的情况:

int ptr; 在这种情况下,所有需要的内存将在同一页上。

int *ptr = new int; 在这种情况下,ptr 的地址可以在一页上,而它指向的内存可能在不同的页上,这可能会导致访问内存时出现页面错误,即*ptr

0
0 Comments

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

例如:

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

ifoo 之外不需要。因此,您在堆栈上创建对象并返回其值。

如果您在创建对象的范围之外需要该对象,则可以在堆上使用对象。

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

ip 指向的指针从 foo 返回,并且预计由调用函数使用。因此,您需要在堆上创建对象并返回它。

这是差异的概念方面。通常,如果您谈论的是 int,则无需使用堆上的对象。当您需要返回数组时,差异变得重要。

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

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

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

那样会起作用,因为返回的指针将指向函数返回后仍然有效的对象。但是,调用函数必须负责释放内存。

0