c++ - int* 变量或 int 变量

标签 c++ pointers coding-style

我在 C++ 工作,最近经常使用指针。我发现有几种方法可以初始化我需要使用的内存块。

void functioncall(int* i)
{
    *i = *i + 1;
}

int main(){
    int* a = (int*)malloc(sizeof(int));
    int az = 0;

    functioncall(a);
    functioncall(&az);
}

请注意,第一个变量 int* a 被声明为指针,然后我为其分配了内存。但是,对于 az,它不是一个指针,而是在调用函数时我得到内存的地址。

所以,我的问题是:是否有一种首选方式 =,或者是否有任何惩罚?

最佳答案

int* a = (int*)malloc(sizeof(int));

这会在堆上分配内存。你必须自己解除分配,否则你会遇到内存泄漏。您可以通过调用 free(a); 来释放它。此选项绝对较慢(因为必须请求内存并且必须完成一些其他后台操作)但只要您调用 free,内存就可用。


int az = 0;

这会在堆栈上“分配”内存,这意味着当您离开声明它的函数时它会自动销毁(除非有一些非常罕见的异常(exception))。您不必整理内存。此选项速度更快,但您无法控制对象何时被销毁。

关于c++ - int* 变量或 int 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664137/

相关文章:

c++ - 允许在模板函数中对浮点类型进行位移的变通方法

c++ - 如何生成 8 位(伪)随机数以便排除某些已知数字?

c# - 明确地初始化构造函数中私有(private)字段的默认值..WTF?

Java - 静态编程风格

c++ - 使用 shared_ptr 避免循环包含

c# - 在 C# 中覆盖事件真的会出错吗?

c++ - 通过减少 if 语句使代码更高效

C++ - undefined object 引用

c - 返回的字符串与 c 函数中的字符串不同

c++ - 浅拷贝或深拷贝或数组