【问题标题】:c++ overloading global delete is not working on VSCode c/c++ extensionc++ 重载全局删除不适用于 VSCode c/c++ 扩展
【发布时间】: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++ 插件吗?我在这里缺少什么简单的东西吗?

【问题讨论】:

标签: c++ operator-overloading vscode-extensions


【解决方案1】:

经过一些试验,我得出的结论是 VSCode c/c++ 扩展存在错误。我安装了visual studio并在那里运行代码,它运行良好。我还与使用 c/c++ 扩展名的同学交谈,她遇到了与我相同的问题。现在我们都切换了,问题就消失了。

【讨论】:

    猜你喜欢
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2022-10-04
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多