c++ 重载全局删除不适用于 VSCode c/c++ 扩展
c++ overloading global delete is not working on VSCode c/c++ extension
我正在做一个关于重载全局 new/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++ 插件吗?我在这里缺少一些简单的东西吗?
经过一些试验,我得出结论,VSCode c/c++ 扩展中存在错误。我在那里安装了 visual studio 和 运行 代码,并且运行良好。我还与一位使用 c/c++ 扩展名的同学交谈过,她遇到了和我一样的问题。现在我们都切换了,问题就解决了。
我正在做一个关于重载全局 new/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++ 插件吗?我在这里缺少一些简单的东西吗?
经过一些试验,我得出结论,VSCode c/c++ 扩展中存在错误。我在那里安装了 visual studio 和 运行 代码,并且运行良好。我还与一位使用 c/c++ 扩展名的同学交谈过,她遇到了和我一样的问题。现在我们都切换了,问题就解决了。