![](/img/trans.png)
[英]What is the right way to free a std::vector of pointers in C++?
[英]Arduino/C++ right way to use pointers
我在用 C++ (Arduino) 編寫的程序中有以下場景:
服務.h
class Service
{
public:
Service(AsyncWebServer *server, FS *fs);
~Service();
void loop();
private:
AsyncWebServer *_server;
FS *_fs;
JsonObject *Settings;
void LoadSettings();
}
服務.cpp
Service::Service(AsyncWebServer *server, FS *fs) : _server(server), _fs(fs) { }
Service::LoadSettings(){
{
File configFile = _fs->open("data.json", "r");
DynamicJsonBuffer jsonBuffer;
JsonObject &root = jsonBuffer.parseObject(configFile);
Settings = &root;
configFile.close();
}
Service:loop() {
LoadSettings();
}
在正確的程序中,一旦設置了Settings屬性,它應該在整個生命周期中保持該值,但是我需要一直調用 LoadSettings() 方法,因為當程序退出 LoadSettings() 方法時, Settings屬性正在丟失該值)
使用指針和類屬性的正確方法是什么? 我需要做什么?
您正在做的事情是通過解析對象文件然后離開函數來創建本地對象
DynamicJsonBuffer jsonBuffer; // declared locally
JsonObject& root = jsonBuffer.parseObject(configFile) // root local
創建 root,一個本地引用,然后在離開函數后將 Settings 設置為指向該引用的地址, jsonBuffer
不復存在。
您應該改為聲明 jsonBuffer 靜態或更好,使其成為成員變量_jsonBuffer
不知道為什么你需要root
,只要寫
Settings = &(_jsonBuffer.parseObject(configFile));
(也許您還應該將Settings
重命名為_settings
以具有與其他成員變量相同的樣式)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.