gpt4 book ai didi

c++ - "new operator"将另一个类实例化为工厂?

转载 作者:可可西里 更新时间:2023-11-01 14:59:53 25 4
gpt4 key购买 nike

我尝试使用 new 运算符来实例化特定类,而不是 new 关键字后面的类。

我尝试为抽象类创建一种“工厂”。

在我看来这是不可能的,但让我们仔细检查一下!这段代码可以编译,但主要代码将其视为 Test(而不是 TestImpl 类)

class Test
{
public:
virtual int testCall() { return 0; };

static void* operator new(std::size_t);
};

class TestImpl : public Test
{
virtual int testCall() override
{
return i;
}

int i = 15;
};

void* Test::operator new(size_t sz)
{
return ::new TestImpl();
}

void main()
{
Test * t = new Test(); // Call the new operator, correctly
int i = test->testCall(); // i == 0 and not 15
}

最佳答案

请注意,对于每个 new expression ,将执行以下两件事:

  1. 通过适当的operator new分配内存。
  2. 在步骤#1 分配的内存上构建对象。

所以 operator new 只分配内存,不构造对象。这意味着,对于 Test * t = new Test();,仍然会在重载的 operator new 分配的内存上构造一个 Test >;即使您在 operator new 中构建了一个 TestImpl,但在 operator new 完成后,它很快就会在同一内存上被覆盖。

关于c++ - "new operator"将另一个类实例化为工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com