C++ 是否有 __new__ 等价物?

时间:2021-05-04 08:16:15

标签: c++ new-operator

Python 中的 __new__ 覆盖允许您使用一个类的构造函数来构造一个完全不同的类的对象。想知道是否有任何方法可以在 C++ 或任何其他语言中实现这一点?编写某个求解软件,最初是用 Python 编写的,然后出于速度原因和结构清晰的原因转移到 Java,并为 Java 提供了一种伪方法来实现这一点,但由于 C++ 更加灵活和通用,也许真正的东西可能成为可能。谢谢考虑

2 个答案:

答案 0 :(得分:5)

在调用构造函数之前为对象分配内存。

而且由于 C++ 不是动态类型系统,因此您无法在运行时更改对象的类型。

改用工厂函数。

答案 1 :(得分:0)

直译你想做的事情可能是这样的:

class A {};
class B {};
class C {};

void* create_object(char class_letter) {
    switch (class_letter) {
        case 'A': return new A;
        case 'B': return new B;
        case 'C': return new C;
        default: return new A;
    }
}

每个上过第一堂 C++ 课程(包括通常的建议)的人都知道这肯定会爆炸。为什么?看:你可以这样调用这个函数:

void* ptr = create_object('B');

你得到一个 void* 这不是一件好事,因为现在你有责任将它转换为正确的类型,例如:

B* b_ptr = (B*)ptr; // eww!

同样重要 - 现在你也有责任delete(糟糕!),这是我们程序员往往忘记的流行事情。


最重要的是,它是可行的 - 一如既往,但很丑。因此,如果您计划在 C++ 中实现它,请使用不同的设计模式。