gpt4 book ai didi

c++ - 是否可以从现有基类动态分配派生类所需的额外内存?

转载 作者:行者123 更新时间:2023-11-30 03:19:08 25 4
gpt4 key购买 nike

是否可以让派生类将额外的内存添加到从其他地方返回的指针?

原因是我正在使用一个向我返回 Base * 的库,并且我使用 Derived * 向它添加了一些额外的功能。问题是我当前执行此操作时必须创建一个全新的对象,并且丢失了库内部用于更新的原始指针。

我尝试用简单代码做的事情的例子:

class Base 
{
public:
Base() {}
~Base() = default;

void BaseMethod();
private:
int foo;
};

class Derived : public Base
{
public:
Derived() : Base() {}
~Derived() = default;

void DerivedMethod();
private:
int bar;
}

// Somewhere else
Base* baseClass = new Base();

// This is the important part/question.
// Is there some way to "allocate" the missing memory to make "baseClass" a Derived?
// I don't want to allocate an entirely new object, I just want to find out if it
// is possible to allocate the missing memory to make Base a Derived
// (and use the same pointer still)
Derived* derivedClass = SomehowAddExtraMemoryTo(baseClass);

最佳答案

不,这是不可能的:基本上没有可用的 C 风格 realloc 以某种方式将 Base* 转换为 Derived*

但我过去看到的一个“模式”涉及两者继承自 Base 存储指向 的指针Derived 中的 Base:

class Derived : public Base
{
Base* b;
};

然后您在 Derived 中编写一个方法来附加 Base 指针。这是您用来引入额外功能的技术。您在继承中保留 Base 这一事实意味着您可以在必要时将 Derived* 作为 Base* 传递。

当然这有其危险。您必须非常小心地在所有方法中使用正确的指针b 或基类this。另外,在销毁时销毁 b 时必须小心。如果可能的话,我至少会让 Derived 不可复制。

关于c++ - 是否可以从现有基类动态分配派生类所需的额外内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54003327/

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