gpt4 book ai didi

c++ - 在结构中定义一个没有默认构造函数的类

转载 作者:搜寻专家 更新时间:2023-10-31 00:24:34 25 4
gpt4 key购买 nike

我遇到了一个问题,我必须在嵌入式系统中使用 C++ 库。该库(用于微 Controller 的 Tensorflow Lite)专为嵌入式系统而设计,无需 malloc/free 即可使用,但是使用它的示例定义了堆栈上的所有内容,并且没有可用的默认构造函数。

在堆栈上定义在我的应用程序中不起作用,因为我需要能够在函数中初始化它然后退出。我需要的是能够分配一个内存区域(使用我自己的分配器),其中包含我需要的所有内容,然后初始化该内存区域中的所有内容。

我试图将其归结为一个最低限度的例子:

// This is a third party library
class OtherClass {};
class MyClass {
private:
OtherClass &c;
public:
MyClass(OtherClass &c) : c(c) {};
};

// My code
typedef struct {
OtherClass otherClass;
MyClass myClass;
} MyAllocatedData;

char dataIsSomewhere[sizeof(MyAllocatedData)];
MyAllocatedData *pData = (MyAllocatedData *)dataIsSomewhere;

int main() {
// dataIsSomewhere gets allocated somewhere on demand
// now we want to initialise everything
pData->myClass = MyClass(pData->otherClass);
return 0;
}

此编译失败:

test.cpp: In function ‘int main()’:
test.cpp:20:45: error: use of deleted function ‘MyClass& MyClass::operator=(MyClass&&)’
pData->myClass = MyClass(pData->otherClass);
^
test.cpp:3:7: note: ‘MyClass& MyClass::operator=(MyClass&&)’ is implicitly deleted because the default definition would be ill-formed:
class MyClass {
^~~~~~~
test.cpp:3:7: error: non-static reference member ‘OtherClass& MyClass::c’, can’t use default assignment operator

有解决这个问题的好方法吗?修补库是可能的,但我宁愿不这样做。

也许我可以为 MyClass 定义我自己的 new 运算符,将它分配到正确的位置?但这似乎并不理想。

最佳答案

您可以使用 placement new 在给定位置创建对象:

new (&pData->myClass) MyClass(pData->otherClass);  

关于c++ - 在结构中定义一个没有默认构造函数的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57885835/

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