今天七夕,群友让我帮忙给他分配一个对象,于是我。。。

今天七夕,群友让我帮忙给他分配一个对象,于是我只好尝试给他分配对象了:

cpp 复制代码
CGirlFrined *pGF = new CGirlFrined("大屌萌妹");

int nRet = (群友).SetGirlFriend(pGF);

if (nRet != 0)
{
    alert("分配失败!");
}

后来觉得这段代码过于简单,分配的方法也有些过于简单了,于是我参考了网上的代码,然后丰富了代码内容,包含NTR在内的更多的分配方式:

cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

class CGirlFriend {
public:
	string name;
	int age;
	CGirlFriend() {
		this->name = "小萝莉";
		this->age = 0;
	}
	CGirlFriend(const string& name, int age = 12)
		: name(name), age(age)
	{}

	static void* operator new(size_t size){       
		cout << "女朋友准备中。。。" << endl;
	return malloc(size);
	}

		static void* operator new(size_t size, CGirlFriend* ptr){    
		cout << "NTR别人的女朋友。。。" << endl;
	return ptr;
	}

		static void* operator new[](size_t size) {     
		cout << "一大波女朋友准备中。。。" << endl;
		return malloc(size);
	}

		static void* operator new[](size_t size, list<void*>& lt) {    

		cout << "女朋友们的聚会准备中。。。" << endl;
		void* tmp = malloc(size);
		lt.push_back(tmp);
		return tmp;
	}
};


int main(void)
{

	CGirlFriend* gf1 = new CGirlFriend("小萝莉");

	CGirlFriend* gf2 = new(gf1) CGirlFriend;

	delete gf2;

	CGirlFriend* gfs = new CGirlFriend[10]{ { "萌妹子", 19 } };

	for (int i = 0; i < 10; ++i)
		cout << (gfs + i)->name.c_str() << endl;

	delete[] gfs;

	list<void*> girlList;

	CGirlFriend* gfss1 = new (girlList) CGirlFriend[10];
	for (int i = 0; i < 10; ++i)
		cout << (gfss1 + i)->name.c_str() << endl;

	CGirlFriend* gfss2 = new (girlList) CGirlFriend[20];

	for (auto& ptr : girlList)
		delete[] ptr;

	system("pause");

	return 0;

}

此代码在vs2015上测试运行通过,结果如下:

欢迎交流与讨论。

相关推荐
浅时光_c1 天前
3 shell脚本编程
linux·开发语言·bash
历程里程碑1 天前
2. Git版本回退全攻略:轻松掌握代码时光机
大数据·c++·git·elasticsearch·搜索引擎·github·全文检索
极客智造1 天前
深度解析 C++ 类继承与多态:面向对象编程的核心
c++
Evand J1 天前
【三维轨迹目标定位,CKF+RTS,MATLAB程序】基于CKF与RTS平滑的三维非线性目标跟踪(距离+方位角+俯仰角)
开发语言·matlab·目标跟踪
今天又在写代码1 天前
java-v2
java·开发语言
competes1 天前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql
Ulyanov1 天前
用Pyglet打造AI数字猎人:从零开始的Python游戏开发与强化学习实践
开发语言·人工智能·python
独自归家的兔1 天前
OCPP 1.6 协议详解:StatusNotification 状态通知指令
开发语言·数据库·spring boot·物联网
希望永不加班1 天前
Spring AOP 代理模式:CGLIB 与 JDK 动态代理区别
java·开发语言·后端·spring·代理模式
RNEA ESIO1 天前
PHP进阶-在Ubuntu上搭建LAMP环境教程
开发语言·ubuntu·php