C++ 中未分配对象的垃圾回收
Garbage Collection in c++ for unassigned objects
我仍在学习 c++ 的所有细节,我有一个关于它如何处理与我正在执行的特定任务相关的垃圾收集的具体问题。我有一些类,Vector2D,它包含矢量的坐标以及可以对矢量执行的一组数学属性(点积,旋转,缩放等(。下面列出了一个提供布局的示例头文件。
#ifndef VECTOR2D_H
#define VECTOR2D_H
class Vector2D{
private:
double x, y;
public:
Vector2D(double var1, double var2, int coordinateType);
Vector2D * normalize();
Vector2D * rotate(double angle);
Vector2D * scale(double value);
};
现在,我以特定方式创建了此类以具有特定功能。当我有一个Vector2D
对象时,比如说vec
,我希望能够对该对象进行操作并取回一个新对象,而不是更改vec
对象。我还想要链接命令的能力。这样我就可以做一些类似缩放vec
然后使用命令旋转它 vec = vec.scale(5).rotate(45)
.这些方法中的每一个都只是返回一个新的Vector2D
对象,而不是因此更改vec
的参数。
我的问题带有垃圾收集。我只是不知道 c++ 如何处理这个问题以及我应该如何处理这个问题。从技术上讲,在执行vec.scale(5)
的过程中创建了一个新的 Vector2D 对象,然后我对其进行.rotate(45)
,但随后再也不会使用。更重要的是,我什至无法访问新创建的对象,因为我从未将其分配给任何东西。所以我的问题是这样的。
1(我是否必须担心删除这些新对象,或者c ++知道自己删除它们?
2(如果我必须删除它,如何在不引用该对象的情况下执行此操作?
3(如果(2(不能完成但需要完成,那么我的代码构建是否是一种不好的做法?我应该把它改成不做我做过的事情吗?
谢谢!
垃圾回收。每当使用 operator new
和 operator new[]
创建对象时,您都有责任删除这些对象,具体取决于对象的创建方式,delete
或delete[]
。
C++允许您使用临时对象,这些对象一旦超出范围就会被销毁。这使您可以实现所需的API:您需要做的就是声明成员函数返回类型而不带指针,将函数标记为const
,并返回对象而不是指针:
class Vector2D {
private:
double x, y;
public:
Vector2D(double var1, double var2, int coordinateType);
Vector2D normalize() const;
Vector2D rotate(double angle) const;
Vector2D scale(double value) const;
};
这样,您可以按照描述的方式链接调用:
vec = vec.scale(5).rotate(45);
这将为 scale(5)
的返回值创建一个临时对象,对其调用 rotate(45)
,将结果赋回 vec
,并销毁在该过程中创建的两个临时对象。
在内存受限系统(又名嵌入式系统(中,我们使用预先分配的对象数组作为内存池并从内存池中分配。
由于碎片问题,避免了动态内存分配。
垃圾收集在安全关键或时间关键事件上不受欢迎。
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 为对象分配整数.输出将是什么?
- C++ 使用枚举类对象分配 std::map 值
- 如何在C++中为增加但记住删除先前对象的对象分配唯一标识符
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 如何使用函数(而不是构造函数)将派生类对象分配给基类指针
- 是否可以使用 malloc 为类对象分配内存?
- 将对象分配给数组C++
- 我们可以在cpp中为对象分配函数吗
- 为模板参数类型中的新对象分配内存
- 我无法将对象分配给对象数组
- 对象分配-成员函数的使用无效错误
- 将派生对象分配给函数内的基类指针
- Arduino ESP32如何将BLEUUID对象分配到字符串中
- Rapidjson将密钥值从一个文档对象分配到另一个文档对象
- 奇怪的对象分配行为C