c++ - 重载运算符 new 以获取不同的返回值

标签 c++ pointers operator-overloading new-operator

是否可以重载运算符 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 的实例?现在不用担心安全问题和处理删除,这只是一个简单的简化示例来解释我的问题。

最佳答案

没有。

3.7.4.1 分配函数:

... The return type shall be void*. ...

正如 BigBoss 所说,这是因为 new 运算符调用 operator new 并期望它具有特定的返回类型。

关于c++ - 重载运算符 new 以获取不同的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13145427/

相关文章:

c++ - 使用 boost::accumulators,如何重置滚动窗口大小,它是否保留额外的历史记录?

c++ - Boost::python 和来自基类虚函数的迭代器

c++ - SDL 从纹理中读取像素

c - 将 '\0' 分配给指针与将 NULL 分配给它相同吗?

ios - 从属性指针数组初始化

c++ - auto的赋值可以不是r值表达式的结果吗?

c++ - 无法移动集合迭代器

c++ - 删除指针后将其设为 NULL 是一个好习惯吗?

c++ - 重载 [][] 运算符 c++

c++ - 如果 C++ 类的运算符重载,我该如何使用默认运算符呢?