Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从函数和内存分配返回struct 让我们考虑这样的例子: typedef struct { int hours; int minutes; int seconds; } Time; Time createTime() { Time time; time.hours = .... time.hours = .... time.hours = .... return time } void doSomething(){ while(true){ Time newTime = createTime(); // do something with time.... } }_C++_C - Fatal编程技术网

C++ 从函数和内存分配返回struct 让我们考虑这样的例子: typedef struct { int hours; int minutes; int seconds; } Time; Time createTime() { Time time; time.hours = .... time.hours = .... time.hours = .... return time } void doSomething(){ while(true){ Time newTime = createTime(); // do something with time.... } }

C++ 从函数和内存分配返回struct 让我们考虑这样的例子: typedef struct { int hours; int minutes; int seconds; } Time; Time createTime() { Time time; time.hours = .... time.hours = .... time.hours = .... return time } void doSomething(){ while(true){ Time newTime = createTime(); // do something with time.... } },c++,c,C++,C,我对内存分配有一些问题 为什么方法createTime()不返回NULL?#time是一个局部变量,因此当方法超出范围时,它应该被销毁 在方法doSomething()中,我多次调用createTime(),这会导致内存泄漏吗 您不返回指针或引用,而是按值返回,这意味着结构已被复制。没有动态内存分配,编译时由编译器处理,因为没有动态分配,所以没有内存泄漏的机会 这有一个缺点,那就是您不能返回NULL来表示没有要返回的内容。您必须始终返回有效的结构。通过说返回时间[使用;]返回的是值,而不是地址,

我对内存分配有一些问题

  • 为什么方法
    createTime()
    不返回NULL?
    #time
    是一个局部变量,因此当方法超出范围时,它应该被销毁
  • 在方法
    doSomething()
    中,我多次调用
    createTime()
    ,这会导致内存泄漏吗
    您不返回指针或引用,而是按值返回,这意味着结构已被复制。没有动态内存分配,编译时由编译器处理,因为没有动态分配,所以没有内存泄漏的机会


    这有一个缺点,那就是您不能返回
    NULL
    来表示没有要返回的内容。您必须始终返回有效的结构。

    通过说
    返回时间
    [使用
    ]返回的是值,而不是地址,并将返回值收集到调用者的变量中。返回值只需复制到
    newTime

    这是完全正确的。没有动态内存使用。在此上下文中没有内存泄漏


    接下来,
    createTime()
    无法返回
    NULL
    ,因为返回类型被指定为
    Time
    类型。它必须返回类型为
    Time
    的有效结构变量。此外,
    NULL
    适用于指针类型。但是,如果愿意,您可以返回一个所有成员都初始化为
    -1
    [根据您的结构定义,成员是
    int
    ]的结构,以报告一些故障。

    createTime
    无法执行
    返回NULL-它返回一个
    时间

    函数在C和C++中按值返回。这意味着当您编写

    返回时间时,创建了一个名为返回值的临时对象。这是从返回的表达式复制的。在C中,这是成员智能复制,在C++中使用复制构造函数。因此,代码的事件序列
    Time newTime=createTime()是:

  • 创建并填充
    createTime()
    内部的
    time
  • 将创建返回值,并将其值从
    time
  • 时间
    被销毁
  • 创建
    newTime
    ,返回值用作初始值设定项
  • 返回值被销毁
  • 现在原则上这是大量的复制和破坏,但是编译器可以优化它(在C和C++中),这样最终的结果是
    createTime
    可以直接将
    time
    构造到
    newTime
    的内存空间中,而不需要临时性。在实践中,您可能会发现应用了不同级别的优化


    注意。在C++11中,用上面的copy或move替换copy。

    我认为for struct访问说明符默认为全局。