我知道在Arduino中不能使用delete
。那么C++类中定义的析构函数何时被调用?
同样地,如果我想创建一个指向数组的指针,我会需要使用malloc
和free
吗?
析构函数在变量超出作用域或被delete
时调用。这意味着,如果您没有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
只是带有饼干(一些IDE功能+ USB引导程序)的AVR
平台。我相信,如果作者使用C ++
,那么它实际上是AVR
的gcc
端口。我在AVR
上使用了这样的技巧来运行g ++
,在发布之前进行了一些谷歌搜索,并发现在Arduino
上也是可能的。 - Lol4t0throw
不需要操作系统支持。 - Lol4t0抱歉,但在Arduino中,您可以使用new
创建的任何内容都不能使用delete
。
当您删除时,会调用destructor
。
关于malloc
和free
也是如此。
class MyClass {
private:
char *_var;
public:
MyClass(int size) { // Constructor
_var = (char *) malloc(sizeof(char) * size);
...
}
~MyClass() { // Destructor
free( _var );
}
...
}
malloc
和free
。 - user195488AVR
平台上编写程序。这是该平台的g++
端口,但实际上标准库缺少new和delete。我认为这是因为您可能希望使用自己的动态内存管理器,在低内存情况下更有效。 - Lol4t0