Why or when to declare an int with a pointer?
本问题已经有最佳答案,请猛点这里访问。
除了持续时间外,这两个有什么不同吗?
1 2 | int ptr; int *ptr = new int; |
我理解指针的概念,但我不认为它有多大的用处来处理一个带有指针的int。
如果不需要在创建对象的作用域之外的对象,则可以使用堆栈上的对象。
例子:
1 2 3 4 5 | int foo(int in) { int i = in + 2; return i; } |
如果需要在创建堆的作用域之外的对象,可以使用堆上的对象。
1 2 3 4 5 | int* foo(int in) { int* ip = new int(in + 2); return ip; } |
这就是差异的概念方面。通常,如果您谈论的是
1 2 3 4 5 | int* foo() { int arr[] = {1, 2, 3, 4}; return arr; } |
该函数将是一个问题,因为它返回的指针在函数返回时将无效。
1 2 3 4 5 | int* foo() { int* arr = new int[4]{1, 2, 3, 4}; return arr; } |
这将起作用,因为返回的指针将指向有效的对象,即使在函数返回之后也是如此。但是调用函数必须负责释放内存。
从性能的角度可以看出差异。
考虑最坏的情况:
在这种情况下,所有需要的内存都将在同一页上。