【发布时间】:2022-01-09 08:23:09
【问题描述】:
我正在处理一个关于重载全局 new/delete 的学校项目,并且在调用默认运算符 delete 而不是我的重载版本时遇到问题。本来以为是我的代码有问题,但是我安装了Dev-C++,成功调用了重载的操作符。这是我用于测试的代码(不是我的项目代码,我是从这里得到的: https://thispointer.com/overloading-new-and-delete-operators-at-global-and-class-level/)。
#include <iostream>
#include <cstdlib>
// Overloading Global new operator
void* operator new(size_t sz)
{
void* m = malloc(sz);
std::cout<<"User Defined :: Operator new"<<std::endl;
return m;
}
// Overloading Global delete operator
void operator delete(void* m)
{
std::cout<<"User Defined :: Operator delete"<<std::endl;
free(m);
}
// Overloading Global new[] operator
void* operator new[](size_t sz)
{
std::cout<<"User Defined :: Operator new []"<<std::endl;
void* m = malloc(sz);
return m;
}
// Overloading Global delete[] operator
void operator delete[](void* m)
{
std::cout<<"User Defined :: Operator delete[]"<<std::endl;
free(m);
}
class Dummy
{
public:
Dummy()
{
std::cout<<"Dummy :: Constructor"<<std::endl;
}
~Dummy()
{
std::cout<<"Dummy :: Destructor"<<std::endl;
}
};
int main()
{
int * ptr = new int;
delete ptr;
Dummy * dummyPtr = new Dummy;
delete dummyPtr;
int * ptrArr = new int[5];
delete [] ptrArr;
return 0;
}
这段代码打印了Dev-C++中的所有语句,除了“user-defined :: operator delete”之外的所有语句都打印在VSCode中。
我的问题是我可以尝试找出这个问题的根源吗?我应该在 VSCode 上重新安装 c++ 插件吗?我在这里缺少什么简单的东西吗?
【问题讨论】:
-
operator delete[]必须是noexcept参见 en.cppreference.com/w/cpp/memory/new/operator_delete
标签: c++ operator-overloading vscode-extensions