flyer_son 2017-04-06 04:16
浏览 545

关于重载全局的operator delete 问题

//base.h
#ifndef BASE_H
#define BASE_H
#include<cstddef>
extern void* operator new(const size_t size,const char *file,const size_t line);
extern void operator delete(void *pv);

//base.cpp
#include "base.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

void* operator new(const size_t size,const char *file,const size_t line)
{
        std::cout << "new:" << std::endl;
        return malloc(size);
}

void operator delete(void *pv)
{
        std::cout << "delete:" << std::endl;
        free (pv);
}

//main.cpp
#include "base.h"
int main()
{
        int *pt = new int;
        delete pt;
        return 0;
}

//上面的代码编译报错,说delete重定义了,我把那个#include 去掉(主要是包含了new.h),程序编译通过,而且,程序运行也是调用的重载函数,这时为何?后面,我把他们合并到main.cpp 中,发现一切又是正常的(包含iostream.h),

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 vmware exsi重置后登不上
    • ¥15 易盾点选的cb参数怎么解啊
    • ¥15 MATLAB运行显示错误,如何解决?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容
    • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
    • ¥20 yolov5自定义Prune报错,如何解决?
    • ¥15 电磁场的matlab仿真
    • ¥15 mars2d在vue3中的引入问题
    • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面