Arduino C++析构函数

Arduino C++ destructor?

本文关键字:析构函数 C++ Arduino      更新时间:2023-10-16

我知道在Arduino中不能使用delete。那么,C++类中定义的析构函数什么时候被调用呢?

类似地,如果我想创建一个指向数组的指针,我必须使用mallocfree

销毁对象时调用析构函数。对于自动(堆栈上)变量,它在离开其作用域({})后被调用。阅读有关自动变量的更多信息。

当变量超出作用域或delete'd时,将调用析构函数。这意味着,如果没有delete,则只能自动内存中创建非POD结构。

不能使用mallocfree,因为构造函数和析构函数将不会被调用

但是,您可以尝试创建自己的newdelete,如下所示:

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

关于mallocfree是的。

class MyClass {
  private:
    char *_var;
  public:
    MyClass(int size) { // Constructor
      _var = (char *) malloc(sizeof(char) * size);
      ...
    }
  ~MyClass() { // Destructor
    free( _var );
  }
  ...
}