gpt4 book ai didi

c++ - 来自静态成员函数的 sizeof C++ 类

转载 作者:行者123 更新时间:2023-11-28 07:28:49 25 4
gpt4 key购买 nike

我正在尝试编写一段 C++ 代码,从静态类成员中分配一个类的实例,同时让它知道任何继承子类的大小

.h文件

class MyObject {
int toastNumber;
static MyObject *allocate();
}
class MySubclass : public MyObject {
int NSABackdoor;
int someOldFunction();
}

.cpp文件

#include ".h file"

MyObject *MyObject::allocate() {
return (MyObject *)calloc(1, sizeof(this)); // error here
}

int MySubclass::someOldFunction() {
return 6;
}

main.cpp 文件

#include other files
int main() {
MySubclass *instance = MySubclass::allocate();
return 0;
}

在尝试编译代码时,g++ 吐出类似这样的错误

MyObject.cpp: In static member function ‘static MyObject* MyObject::allocate()’:
MyObject.cpp:5:47: error: ‘this’ is unavailable for static member functions

可以像这样从成员函数中分配实例吗?我不能只使用 sizeof(MyObject) 因为那样会破坏继承。我知道这可以通过宏来完成,但我更喜欢将它作为类函数。

谢谢

--

凯兰

最佳答案

如果你坚持这样做,你应该使用模板,如下所示。

template <class SubClass>
static SubClass* allocate();

template <class SubClass>
SubClass *MyObject::allocate() {
return (SubClass *)calloc(1, sizeof(SubClass));
//or return new SubClass(); // this is better and is the C++ way
}

请注意,使用 calloc 可能会导致进一步的问题,首先是它不会调用构造函数。

此外,我假设您指的是 malloc,因为 calloc 似乎是用于数组的。

然后你会称它为

MySubclass *instance = MyObject::allocate<MySubclass>();

你的代码不起作用,因为 C++ 没有“ self 类型”的概念

关于c++ - 来自静态成员函数的 sizeof C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168134/

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