gpt4 book ai didi

c++ - 如何在 C++ 中释放已分配的内存?

转载 作者:行者123 更新时间:2023-11-28 00:02:10 25 4
gpt4 key购买 nike

假设我有一个头文件 armorshop.h,其中包含一个类定义,以及该头文件的相应 .cpp。

我的问题是:

  1. 如何在 C++ 中释放分配的内存?
  2. allocatedmemory1、allocatedmemory2、allocatedmemory3 或 allocatedmemory4 是否会在每种情况下自行释放?
  3. 这些上述分配的内存是否会被重新定义并在每种情况下导致错误?
  4. 是否在类定义内部定义的变量和类等在不使用时被释放,并在再次使用时重新定义?或者它们是否被定义一次并在未被使用时耗尽资源?

谢谢

//scenario 1
//armorshop.h
#ifndef __SFML__armorshop__
#define __SFML__armorshop__


class armorshop : public entity
{
public:

};

int allocatedmemory1;
sf::FloatRect allocatedmemory2;
class armorshop allocatedmemory3;
std::vector<armorshop> allocatedmemory4;

#endif

(问题 3 关于场景 1 的说明:)如果我 #include "armorshop.h" 多次会导致错误

//scenario 2
//armorshop.cpp
int allocatedmemory1;
sf::FloatRect allocatedmemory2;
class armorshop allocatedmemory3;
std::vector<armorshop> allocatedmemory4;

最佳答案

  1. How does allocated memory get freed in c++?

如何释放内存取决于实现,以及内存最初是如何分配的。

  1. Will allocatedmemory1, allocatedmemory2, allocatedmemory3, or allocatedmemory4 ever be freed on its own in each of these scenarios?

所有这些变量都具有静态存储持续时间。具有静态存储持续时间的对象在 main 返回后被释放。

全局变量是在包含在源文件中的头文件中定义的(场景 1),还是全局变量是直接在源文件中定义的(场景 2),对变量何时“释放”没有影响.

  1. Do variables and ... get freed when they are not being used

没有任何东西是基于它们是否被使用而被“释放”的。

Do ... classes ... get freed

类没有被“释放”。

If I #include "armorshop.h" multiple times will this cause an error

armorshop.h 定义全局变量。在多个源文件中包含 header 将导致每个源文件定义相同的变量。这违反了一个定义规则。您几乎不应该在 header 中定义全局变量。

附言。 __SFML__armorshop__ 是一个保留标识符,因为它包含两个连续的下划线。在您的代码中定义它会使您的程序格式错误。

关于c++ - 如何在 C++ 中释放已分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38043769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com