这是一个初学者的问题,但我很久没有做C ++了,所以这里… 我有一个类包含一个动态分配的数组,说 class A { int* myArray; A() { myArray = 0; } A(int size) { myArray = new int[size]; } ~A() { // Note that as per MikeB's helpful style critique, no need to check against 0. delete [] myArray; } } 但是现在我想创建一个动态分配的这些类的数组。 这是我现在的代码: A* arrayOfAs = new A[5]; for (int i = […]
删除空指针是否安全? 这是一个很好的编码风格?
我正在尝试使用perfmon窗口实用程序来调试过程中的内存泄漏。 这就是perfmon如何解释术语: 工作集是此进程的工作集的当前大小(以字节为单位)。 工作集是进程中线程最近触及的一组内存页面。 如果计算机中的可用内存超过阈值,即使不在使用中,页面也会留在进程的工作集中。 当空闲内存低于阈值时,页面将从工作集中删除。 如果需要的话,在离开主存之前,他们将被软件故障切换回工作集。 虚拟字节是进程正在使用的虚拟地址空间的当前大小(以字节为单位)。 使用虚拟地址空间不一定意味着相应地使用磁盘或主内存页面。 虚拟空间是有限的,这个过程会限制它加载库的能力。 专用字节是当前的大小,以字节为单位,该进程分配的内存不能与其他进程共享。 这些是我有的问题: 是我应该测量的私人字节,以确定这个过程是否有任何泄漏,因为它不涉及任何共享库,如果发生任何泄漏,将来自过程本身? 该进程消耗的内存总量是多少? 它是虚拟字节还是虚拟字节和工作集的总和? 私人字节,工作集和虚拟字节之间有任何关系吗? 还有没有其他工具可以更好地了解内存使用情况?
是否允许delete this; 如果delete语句是将在该类的该实例上执行的最后一个语句? 当然,我确定this指针代表的对象是new创建的。 我正在考虑这样的事情: void SomeModule::doStuff() { // in the controller, "this" object of SomeModule is the "current module" // now, if I want to switch over to a new Module, eg: controller->setWorkingModule(new OtherModule()); // since the new "OtherModule" object will take the lead, // I want to get rid of this "SomeModule" object: […]