我正在用C++实现一个数学库.该库将被编译为DLL,因此使用它的人只需要类的定义的头文件.
我班级的用户将是不熟悉该语言的人.但是,有些对象可能会在程序的几个部分中被引用.由于我不指望他们做内存管理,我想自己做.因此,我必须实现引用计数(垃圾收集不可能).
我想让那个引用计数尽可能透明,例如......
// Define a Bézier curve
CVecList pts;
pts.Add(Vector(0,0,0));
pts.Add(Vector(0,0,100));
pts.Add(Vector(0,100,0));
pts.Add(Vector(0,100,100));
CCurve* c1 = new CBezier(pts);
// Define a 3rd order B-Spline curve
pts.Clear();
pts.Add(Vector(0,0,0));
pts.Add(Vector(0,200,100));
pts.Add(Vector(0,200,200));
pts.Add(Vector(0,-200,100));
pts.Add(Vector(0,-200,200));
pts.Add(Vector(0,0,0));
CCurve* c2 = new CBSpline(pts,3);
// The Bézier curve object must be deleted automatically
// because the only reference to it has been released
// Similar to IUnknown::Release() in COM
c1 = c2;
Run Code Online (Sandbox Code Playgroud)
当我定义表面对象时,事情变得有点棘手,因为一些表面是根据两条曲线定义的:
CVecList pts;
// ...
CCurve* f = new CBezier(pts);
pts.Clear();
// ...
CCurve* …Run Code Online (Sandbox Code Playgroud)