C++ 编写C++;析构函数

C++ 编写C++;析构函数,c++,destructor,C++,Destructor,如果定义自定义析构函数,是否必须手动删除每个变量 由malloc分配的内存在析构函数中应该是freed。指向由malloc分配的内存的指针和int如何? a、 h: test.cpp: #include "a.h" int f(void){ A objA; //cout << objA.x << endl; //Upon exiting the function //destructor of A is called. } int main

如果定义自定义析构函数,是否必须手动删除每个变量

malloc
分配的内存在析构函数中应该是
free
d。指向由
malloc
分配的内存的指针和
int
如何?
a、 h:

test.cpp:

#include "a.h"
int f(void){
    A objA;
    //cout << objA.x << endl;
    //Upon exiting the function
    //destructor of A is called.
}
int main(void){
    uint32_t i;
    // see if memory usage go crazy.
    for (i = 0; i < 10000000000; i++) f();
}
#包括“a.h”
int f(无效){
奥布贾;

//cout您不需要为
x
做任何事情。您需要处理
ar\u y
指向的释放内存

有关为类中的成员变量分配内存时需要执行的操作的更多信息,请参阅


由于您在C++域中,所以喜欢使用<代码>新< /COD>和<代码>删除< /COD>运算符,而不是使用<代码> Malc C < /C> >和<代码>免费< /> > > p>您不需要为<代码> x>代码>做任何事情。您需要注意“代码< > ARYY 指向的内存分配。

有关为类中的成员变量分配内存时需要执行的操作的更多信息,请参阅


因为您在C++域中,所以喜欢使用<代码>新< /COD>和<代码>删除< /COD>运算符,而不是使用<代码> Malc C < /C> >和<代码>免费< /C> >y将释放分配给您的内存y@Bafforasta如果使用了

new
,那就太合适了。@WhozCraig我只是想知道为什么他不总是让你的析构函数变为虚拟的!“在退出函数A时,析构函数被调用”…对于对象内部的非堆分配变量也是如此,即它们一旦超出范围就会被销毁。delete[]y将释放分配给的内存以供使用y@Bafforasta如果使用了新的
,那就太合适了。@WhozCraig我只是想知道为什么他不总是让你的析构函数虚拟化!退出时,调用的函数析构函数"对于对象内的非堆分配变量也是一样的,即一旦它们超出了范围,它们就会被破坏。如果我必须在Linux中分配32位对齐的内存……C++中接受的方式是什么?@ RRU,请参阅。所以,我想这意味着1。编写一个抽象层。或者2。当性能非常重要时,这也是我从该职位收集的内容。我在工作中没有亲自处理这个问题。如果我必须在Linux中分配32位对齐的内存……C++中接受的方法是什么?@ RRXU,请参见。所以,我想这意味着1。编写一个抽象层。或者2。当性能非常重要时对齐内存。@rxu,这也是我从那篇文章中收集到的。我个人在工作中没有处理过这个问题。
#include "a.h"
A::A(void){
    x = 0;
    ar_y = (uint32_t*)(malloc(4));
}
A::~A(void){
    // free the memory allocated by malloc
    free(ar_y);
    //Is it ok to do nothing for int* y and int x?
}
#include "a.h"
int f(void){
    A objA;
    //cout << objA.x << endl;
    //Upon exiting the function
    //destructor of A is called.
}
int main(void){
    uint32_t i;
    // see if memory usage go crazy.
    for (i = 0; i < 10000000000; i++) f();
}