我有一个关于良好 C++ 风格的问题:我想编写一个类“MyClass”,它有一个或一些指针作为成员,并且 MyClass 能够为这些指针分配内存。我想使用隐式给出默认复制构造函数(以及默认赋值操作符)来复制 MyClass 的一个实例,以便只复制指针并且新对象共享初始对象具有的数据分配。
我的想法是禁止复制对象(使用复制构造函数或赋值运算符创建)释放内存(以及为成员指针分配内存)。为了区分复制的对象和原始对象(由构造函数创建),我想使用以下代码:
class MyClass
{
public:
MyClass(): originalPtr(this) { data = new char[100000]; }
~MyClass() { if(originalPtr == this) delete[] data; }
private:
MyClass *originalPtr;
char *data; // shared data (not copiable)
char otherFeatures[10]; // individual data (copiable)
};
这个解决方案(使用与this
-pointer 的比较)会是一个好的风格(例如通过按值调用解析对象)还是有风险?当然,我假设原始对象的寿命总是比复制的对象长。
谢谢!