【发布时间】:2012-10-30 18:27:12
【问题描述】:
是否可以重载运算符 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 的 new 运算符以返回 B 的实例?现在别在意安全问题和处理删除,这只是一个简单的简化示例来解释我的问题。
【问题讨论】:
-
私人构造函数不会在这里完成这项工作吗?
-
重写运算符
new几乎总是错误 的事情。为什么不将构造函数和析构函数设为私有,并使用工厂方法返回包装新类实例的智能指针? -
@Jasper 没错,这是有道理的;但是,在私有构造函数的情况下,创建新副本的典型实现是什么?工厂?
-
@Rook 实际上,我已经重载了 new 所以我可以确保结构的所有实例都在内存池中......但是,否则,是的,我知道你的意思 V_V跨度>
-
如果您希望将结构放置在专门管理的内存段中,那么覆盖
new运算符可能是合适的。您应该使用 (placement new 运算符)[stackoverflow.com/questions/222557/…
标签: c++ pointers operator-overloading new-operator