c++ - 全局重载 new 和 delete 操作符
问题描述
我试图在全球范围内重载 new 和 delete 运算符。代码是:
void * operator new(size_t s)
{
cout<<"\nOverloaded new operator with size "<<s<<endl;
void * ptr=::malloc(s);
return ptr;
}
void operator delete(void * ptr)
{
cout<<"\nOverloaded delete operator\n";
free(ptr);
}
class Array
{
int * arr;
int n;
public:
Array(int x=0):n{x}
{
cout<<"\nConstructor called\n";
arr= new int[n];
}
~Array()
{
cout<<"\nDestructor called\n";
delete[]arr;
}
void set_data()
{
cout<<"\nEnter elements:";
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
}
void show_data()
{
for(int i=0;i<n;i++)
cout<<arr[i]<<" ";
}
};
int main()
{
Array * a=new Array{3};
a->set_data();
a->show_data();
delete a;
return 0;
}
当我尝试使用 new 创建一个 Array 对象时,set_data() 函数的输出让我感到困惑。在我看来,好像每次将数组元素作为输入时,都会在堆上创建一个对象并立即删除。请解释这种行为输出
我也是第一次做这个概念。所以如果我理解这个概念有误,请帮助我
解决方案
推荐阅读
- c++ - 将代码提交到 coursera 时出现“未知信号 11”问题。如果我使用二维向量而不是二维数组,问题就会得到解决
- javascript - react-select如何在点击使用打字稿时显示选项
- java - 跨子类的标准化构造函数?
- php - 试图获取非对象的属性“id” - Laravel
- excel - 根据输入范围在 VBA 中输出图形
- bash - 在bash中设置vim路径
- javascript - 从子组件传递时在父组件中保存状态 - 用于多个项目(React Hooks)
- scala - Scala 使用映射键分组
- github - 如何在 sphinx_rtd_theme 中将“查看页面源代码”替换为“在 GitHub 上编辑”链接?
- windows - 如何通过 API 编程隐藏 Windows 中的任务栏条目