我认为这可能是一个非常简单的问题,但我是一名 C++ 开发人员,就像沃尔玛肉类柜台的人是屠夫一样。
说我有:
class Parent{
protected:
~Parent(){};
};
class ChildA : public Parent{
};
struct Container{
Parent *child;
//Tried this, causes: munmap_chunk(): invalid pointer
~Container(){
delete &child;
}
};
Container MakeStruct(){
ChildA child = *new ChildA();
return Container { .child = &child };
}
int main()
{
Container cont = MakeStruct();
//Tried this, causes: "Parent::~Parent()" is inaccessible
delete cont.child;
}
如您所见,我正在使用它new
来创建一个ChildA
,因为我需要它来延长MakeStruct
函数的寿命。所以我知道这意味着child
(in MakeStruct
) 将被放置在堆上,并且我负责删除它。但我似乎无法删除它。我无法更改 in 的类型,child
因为Container
我需要它同时接受 aChildA
和 a ChildB
。考虑到受保护的析构函数,这有点道理Parent
。Parent
我无法控制Child
。它们是外部库的一部分。
我认为它有帮助,我正在使用的实际代码是一个名为 ArduinoJson 的库。
我试图从一个函数返回 aDynamicJsonDocument
或 a StaticJsonDocument<T>
,包装在一个结构中,采用 a JsonDocument
:
这是包含的结构JsonDocument
:
struct rpc_handler_result_t {
esp_err_t result;
JsonDocument *response;
};
从以下位置返回:
{
const int len = JSON_OBJECT_SIZE(1);
StaticJsonDocument<len> reply = *new StaticJsonDocument<len>;
reply["MaxOutput"] = Configuration::GetMaxOutputAmps();
rpc_handler_result_t res = {
.result = ESP_OK,
.response = reply
};
return res;
}