在我的应用程序中,我只想使用给定键保留给定类的一个对象。为此,我在 Base 类中覆盖了本地 new 运算符:
void * operator new(size_t size, int k)
{
return BaseFactory::GetInstance(k);
}
它调用 BaseFactory 的静态方法。此方法具有类 Base 的现有对象的列表。如果已经有一个具有相同键的对象,则返回它,如果没有,则创建新对象
Base* BaseFactory::GetInstance(int k)
{
for(vector<Base*>::iterator it = bases.begin(); it < bases.end(); it++)
if((*it)->key == k)
return *it;
//else recognize which object to create on given key. just a simple example
Base *l = ::new Derived(k);
bases.push_back(l);
return l;
}
它工作正常,但我需要使用例如 Base* b = new(1) Derived 调用该函数,而我想保持正常语法是 Base* b = new Derived(1)。我该怎么做,有可能吗?我想重载全局运算符可能会起作用,我试过了
void *operator new (size_t size, Base& b, int key)
{
return BaseFactory::GetInstance(key);
}
但它不起作用。同样现在我正在使用 key 来确定要创建哪个对象是可以的,因为 key 确定对象的类型(从 Base 派生)但也许有更好的方法。
我也对任何其他设计模式持开放态度。