我们希望在低延迟系统上工作,堆分配在应用程序中更昂贵.但是在某种程度上允许在堆上创建对象.这就是为什么我们想要指示是否在堆上创建对象..?
下面的方法是找出堆内存上创建的对象的正确方法吗?
将具有泛型类,其中new和delete运算符被重载以维护堆分配的指针....
#include <iostream>
#include <set>
using namespace std;
class MemStat //base class
{
typedef set<MemStat*> POINTERS;
static POINTERS m_ptrlist;
public:
void* operator new (size_t size)
{
MemStat* ptr = ::new MemStat;
m_ptrlist.insert(ptr);
return ptr;
}
void operator delete(void* dptr)
{
MemStat* ptr = static_cast<MemStat*>(dptr);
m_ptrlist.erase(ptr);
::delete ptr;
}
// void* operator new[] (size_t sz);
// void operator delete[] (void*);
bool is_on_heap() { m_ptrlist.find(this) != m_ptrlist.end(); }
protected: // ctor & dtor are protected for restrictions
MemStat() { } …Run Code Online (Sandbox Code Playgroud) 我必须开发一个组件,它将拥有超过100,000个类的实例.我想根据特定类的不同标准(成员)生成报告.例如,具有数据字段id,名称,addr,phoneno的员工类.报告生成将基于
每次调用的实例的运行时迭代非常慢,因为它是对大量实例的线性操作,需要排序机制.
所以我以不同的排序方式在容器中存储了每个实例的指针.但是需要更多的内存.请建议我这样做的更好方法.我已经发布了我遵循的示例代码片段以实现上述目标.
class Employee
{
int m_id;
string m_name;
string m_addr;
string m_phone;
public:
Employee(int id, string name, string addr, string phone) :
m_id(id), m_name(name), m_addr(addr), m_phone(phone) { }
int id() const { return m_id; }
string name() const { return m_name; }
string addr() const { return m_addr; }
string phoneno() const { return m_phone; }
};
//custom predicate for std containers
struct IDComparator
{
bool operator() (const Employee* e1, const …Run Code Online (Sandbox Code Playgroud) 我知道这可能是一个愚蠢的问题.但我很困惑.Wrt std :: map.我为地图的动态排序编写了一个自定义谓词,
enum OrderingType
{
ASCENDING,
DESCENDING
};
template <class T>
class Ordering
{
OrderingType m_order;
public:
Ordering(OrderingType order) : m_order(order) { }
bool operator() (const T &obj1, const T &obj2)
{
if( m_order == ASCENDING )
return obj1 < obj2;
if( m_order == DESCENDING )
return obj1 > obj2;
}
};
Run Code Online (Sandbox Code Playgroud)
优点是
在某些条件下,我们可以决定地图中数据元素的顺序
OrderType type =(condition?ASCENDING:DESCENDING); CUSTOMMAP m(类型);
我们可以使用相同的前向迭代器来升序和降序有序映射
在下面的代码中.map的排序在升序和降序(amp1和map2)中都能正常工作.但是在赋值map2 = map1时,map2的顺序随内容一起变化.我被期望只复制内容,而不是订单的变化.map2上的进一步插入(声明为降序)将按升序排列.
任何建议或想法..?或者为地图定义双向排序谓词是个坏主意.?
typedef map<int, int, Ordering<int> > CUSTOMMAP;
typedef CUSTOMMAP::iterator CUSTOMMAP_ITER;
typedef CUSTOMMAP::const_iterator CUSTOMMAP_CONST_ITER;
ostream& operator …Run Code Online (Sandbox Code Playgroud)