#include <iostream>
#include <cstdlib>
using namespace std;class Base{
public:Base(int n):_A(n){
_A = n;}Base(){
_A = -1;}// 注意: 一旦有一个operator new 重载,那么其他的operator new 形式的函数都必须重载// 第一个参数 size_t size, 为固定参数类型,传入需要内存的大小static void* operator new(size_t size, void* p, int n){
cout<< "size:"<<size<<endl;cout<< "n:"<<n<<endl;return p;}// 这个是new(p)Base; new(p)Base(20);的处理函数,如果不重载,那么// 当调用上面两个初始化方法时,就会报出错误// 它也什么也没有做,应该也是编绎器自带的operator new的实现方法// 有人把这种调用称为placement new,其实我觉的它们都一样吧,hhhhstatic void* operator new(size_t size, void *p){
cout<<" static void* operator new(size_t size, void *p)- >"<<size<<endl;return p;}// 这个更离奇,如果不重载,那没法调用 new Base; new Base(20);// emmm,其他它什么也没有做,它应该就是编译器自带的operator new的实现方式static void* operator new(size_t size){
cout<<"static void* operator new(size_t size)->"<<size<<endl;return malloc(size);}void show(){
cout<<"_A:"<<_A<<endl;}private:int _A;int b;};
int main(){
Base* p2 = nullptr;// 如果malloc分配的空间小,可能也不会出错,但是会把内存空间给挤过去Base* p= (Base*)malloc(sizeof(Base));cout<<"sizeof(Base)->"<<sizeof(Base)<<endl;cout<<"p->"<<p<<endl;new(p)Base(20);p->show();cout<<"-------------"<<endl;p2 = new Base(100);p2->show();cout<<"p->"<<p<<endl;cout<<"p2->"<<p2<<endl;cout<<"-------------"<<endl;Base obj(2);obj.show();new(&obj)Base(20);obj.show();return 0;
}
详细解决方案
operator new 与 placement new之间的微妙关系
热度:63 发布时间:2023-12-15 04:24:45.0
相关解决方案
- 请教:在s60 3rd中获得手机号、SIM卡号、IMSI、IMEI、CELL、AREA、COUNTRY、OPERATOR
- error a2028:operator expected,该如何解决
- friend ostream& operator<< <Type>(ostream& ,ListNode<Type>&);解决方案
- 哪位高手能告诉小弟我List<Operator>如何遍历
- 为什么执行不了报错 ORA-00920: invalid relational operator
- QMap<int,Item>iteratorerror C2593: “operator !=”不明确,该如何处理
- error C2665: “operator new” : 5个满载中没有一个可以转换参数1(从“const char [71]”类型)
- C++中自增操作符的重载:operator++()与operator(int)
- java中运行时异常 the operator(什么什么)is undefinded for the argument byte[s] 的原因之一
- unary operator expected解决方法
- copy-assignment operator
- Prometheus Operator 使用operator管理alertmanager
- Prometheus Operator 使用ServiceMonitor管理监控配置
- Prometheus Operator 介绍 安装
- Kotlin-14-运算符重载(operator)
- 错误解析 error:unable to find numeric literal operator ‘operator““a/b/c/...‘
- python setup.py install 遇到 SyntaxError: operator not allowed in environment markers
- gdb Could not find operator[]
- 【深入浅出flink】第3篇:多图讲解flink核心概念(通俗易懂)Job、Task、SubTask、Slot、Slotsharing、Parallelism、Operator Chains
- set关联容器去除重复地图点出现问题 error: no match for ‘operator<’ (operand types are ‘const Point’ and ‘const Point
- Antenna Placement POJ - 3020(二分图最大匹配最小边覆盖)
- operator=重载
- 进阶之路:从零到一在k8s上部署高可用prometheus —— prometheus-operator
- 再谈operator new operator delete
- 基础语法.operator
- C++中 operator 的两种使用方式
- 四,运算符(Operator)
- Uncaught Error: [vuex] store must be called with the new operator
- kubernetes中一键部署prometheus operator
- MySQL Operator 01 | 架构设计概览