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();
}