Arduino C++析构函数
Arduino C++ destructor?
我知道在Arduino中不能使用delete
。那么,C++类中定义的析构函数什么时候被调用呢?
类似地,如果我想创建一个指向数组的指针,我必须使用malloc
和free
?
销毁对象时调用析构函数。对于自动(堆栈上)变量,它在离开其作用域({}
)后被调用。阅读有关自动变量的更多信息。
当变量超出作用域或delete
'd时,将调用析构函数。这意味着,如果没有delete
,则只能在自动内存中创建非POD结构。
不能使用malloc
和free
,因为构造函数和析构函数将不会被调用。
但是,您可以尝试创建自己的new
和delete
,如下所示:
void* operator new(size_t size)
{
void* mem = malloc(size);
if (!mem) {
throw std::bad_alloc();
}
return mem;
}
void operator delete(void* ptr)
{
free(ptr);
}
void* operator new[] (size_t size)
{
return (operator new)(size);
}
void operator delete[](void* ptr)
{
return (operator delete)(ptr);
}
很抱歉,您可以将Arduino中的delete
与使用new
创建的任何内容一起使用。
并且当您删除时会调用destructor
。
关于malloc
和free
是的。
class MyClass {
private:
char *_var;
public:
MyClass(int size) { // Constructor
_var = (char *) malloc(sizeof(char) * size);
...
}
~MyClass() { // Destructor
free( _var );
}
...
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 优先顺序:智能指针和类析构函数
- C++-明确何时以及如何调用析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 在c++中使用向量时,如何调用构造函数和析构函数
- 重载运算符new[]的行为取决于析构函数
- 我需要知道编译器如何在cpp中使用析构函数
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 析构函数调用
- 通过引用传递-为什么要调用这个析构函数
- 对具有动态分配的内存和析构函数的类对象的引用
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- C++成员的析构函数顺序与shared_ptr
- C++ 防止在映射中放置()时调用析构函数
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- 调用析构函数以释放动态分配的内存
- 不命名构造函数和析构函数上的类型错误