c++ - 在 C++ 中删除一个对象意味着删除它的成员?
问题描述
我对 c++ 很陌生,我有一个问题。
如果我有一个包含(指向a)向量的类:
class myClass {
public:
int* direction;
myClass(int d){direction=new int[d];}
}
当我创建一个对象并在主中删除它时:
int main(){
int d;
myClass* myvec;
myvec = new myClass(d);
delete myvec;
}
还连贯地调用了 myvec->direction 的析构函数并释放了内存?还是我必须为此编写一个合适的方法?
我希望问题很清楚...
解决方案
如果您已经分配了内存,new
那么您也需要delete
它,如下所示:
class myClass {
int* direction;
public:
myClass(int d) : direction(new int[d]) {}
~myClass() {
delete[] direction;
}
}
但是您还需要编写一个复制构造函数和复制赋值运算符,并且在 C++11 和更高版本中还需要一个移动构造函数和移动赋值运算符,这样才能正常工作。否则,当您使用此类的实例时,您将冒着复制原始指针的默认版本的风险。
看看三/五/零的规则。
最好使用 astd::vector<int>
而不是原始指针。
推荐阅读
- python - 根据操作系统导入模块的函数
- asp.net - 如何在 ExceptionFilter 中填充 ViewDataDictionary
- angular - Ionic/Angular - 选择选项未标记,选项从 API 加载
- javascript - 如何为具有不同日期值的所有任务更新/刷新 dhtmlx 甘特图中的开始日期
- r - 数据操纵:收集或传播或两者兼而有之?
- django - 如何在 Django 中合并不同的模型查询集后删除重复值
- javascript - 当字符串有盐时,crypto js des解密会中断
- flutter - 颤振飞镖布局,堆栈,定位如何在整个屏幕上拉伸材质按钮矩阵
- powerbuilder - 屏幕的细节部分未显示
- r - R中具有相同变量的多个字符向量的探索性数据分析