zep*_*hyr 0 c++ garbage-collection
我还在学习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);
};
Run Code Online (Sandbox Code Playgroud)
现在,我以特定的方式创建了这个类,以获得特定的功能.Vector2D比如vec,当我有一个对象时,我希望能够对该对象进行操作并获取一个新对象,而不是更改该vec对象.我也想要链接命令的能力.这样我可以做一些比如缩放vec,然后用命令旋转它vec = vec.scale(5).rotate(45).由于这个原因,这些方法中的每一个都只返回一个新Vector2D对象而不是更改vec参数.
我的问题来自垃圾收集.我只是不知道c ++如何处理这个以及我应该如何处理它.技术上在vec.scale(5)创建一个新的Vector2D对象的过程中创建,然后我做.rotate(45),但然后再也不用了.更重要的是,我甚至无法访问新创建的对象,因为我从未将其分配给任何东西.所以我的问题就是这个.
1)我是否必须担心删除这些新对象或c ++知道自己删除它们?
2)如果我必须删除它,如何在不引用该对象的情况下这样做?
3)如果(2)不能完成但需要完成,我的代码构造是不好的做法?我应该改变它不做我做过的事吗?
谢谢!
C++没有垃圾收集.无论何时使用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;
};
Run Code Online (Sandbox Code Playgroud)
这样您就可以按照描述的方式链接调用:
vec = vec.scale(5).rotate(45);
Run Code Online (Sandbox Code Playgroud)
这将为返回值创建一个临时对象,对其进行scale(5)调用rotate(45),将结果分配回来vec,并销毁在该过程中创建的两个临时对象.