是否可以重载运算符new()以使其具有与void *?
不同的返回值我有两种结构:
一个结构(A)只保存数据而不保存数据。
构建第二个结构(B)就像指向第一个结构的指针:
struct A;
struct B
{
private:
A* ptr;
public:
A& operator*() { return (*ptr); };
A& operator->() { return (*ptr); };
};
struct A
{
int data;
B operator&() { B ret; ret.ptr = this; return ret; };
};
这个想法很简单。 我不希望任何外部类处理指向A的指针,而不是直接处理指针。
但是,我确实希望它们能够创建A的实例。有没有办法覆盖A的新运算符以返回B的实例?现在没关系安全问题,处理删除,这只是一个简单,简化的例子来解释我的问题。
答案 0 :(得分:3)
没有
3.7.4.1分配功能:
...返回类型应为
void*
。 ...
正如BigBoss所说,这是因为new
运算符调用operator new
并期望它具有某种返回类型。
答案 1 :(得分:2)
运算符new
仅负责为类分配内存,然后C ++在内部调用构造函数来初始化该内存,因此如果要覆盖某些内容到new A
,则会导致B
,那么你应该覆盖C ++!
相反,你可能有:
struct A {
private
friend struct B;
A() {}
};
struct B {
static B new_A() {return B(new A());}
}