c++ - 在C++语言中,如何创建一个指向数组的指针的新对象?

标签 c++ class oop pointers

我正在使用第 3 方库,其中的方法是这样声明的:

void nexLoop(NexTouch *nex_listen_list[]);

在单个 .cpp 文件的情况下,这是有效的:

NexButton b0 = NexButton(0, 1, "b0");
NexTouch *nex_listen_list[] = 
{
    &b0,
    NULL
};
...
nexLoop(nex_listen_list);

完整的示例代码可以在这里看到:https://github.com/itead/ITEADLIB_Arduino_Nextion/blob/master/examples/CompText/CompText.ino

现在我将这个库合并到一个类中,该类具有单独的头文件和 c 文件,以便:

MyNextion.h

#include "Nextion.h"

class MyNextion {
   public:
       MyNextion();
       void loop();
   private: 
       NexButton *b0;
       NexTouch *nex_listen_list[];
}

MyNextion.cpp

#include "MyNextion.h"

MyNextion::MyNextion() {
    b0 = new NexButton(0, 1, "b0");
    nex_listen_list = new ???
}

MyNextion::loop() {
    nexLoop(nex_listen_list); // ???
}

我一直在摆弄指针和地址运算符,但找不到成功编译的正确组合。

我的问题是:你会在这里放什么:nex_listen_list = new ???;

此外,我不确定标题是否很好地定义了我的问题。如果您对标题有更好的想法,请指正。

谢谢!

最佳答案

你不应该声明一个没有大小的成员数组。相反,您可以声明一个指向指针的指针:

class MyNextion {
   ...
   private: 
       NexButton *b0;
       NexTouch **nex_listen_list;
};

然后构造就很简单了:

nex_listen_list = new NexTouch*[10];
nex_listen_list[0] = b0;
....

也就是说,nex_listen_list 是指向NexTouch 对象的动态指针数组。完成后不要忘记 delete[]:

delete[] nex_listen_list;

也就是说,如果数组的大小是常量,那么普通数组就可以了:

       NexButton *b0;
       NexTouch *nex_listen_list[3];

如果没有,我宁愿使用 std::vector。像这样的东西:

class MyNextion {
   ...
   private: 
       NexButton *b0;
       std::vector<NexTouch*> nex_listen_list;
};

然后不需要 newdelete:

nex_listen_list.push_back(b0);
nexLoop(nex_listen_list.data());

继续,您可以将 b0 声明为完整对象,而不是指针:

class MyNextion {
   ...
   private: 
       NexButton b0;
       std::vector<NexTouch*> nex_listen_list;
};
...
nex_listen_list.push_back(&b0); //use the pointer!

没有 new 所以没有 delete 也没有泄漏。

关于c++ - 在C++语言中,如何创建一个指向数组的指针的新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875274/

相关文章:

c++ - 在类中创建对象

python - 如何在 Python 中获取类引用的具体名称(例如 "<module_name>"."<class_name">)?

php - 是否最好少调用数据库并将结果输出到数组中?

c++ - 找出 .h 文件之间的#define 语句冲突

c++ - 如何外部化转换运算符?

java - java中具有逻辑的setter

python - python中面向对象的构造等价于什么?

c++ - 在 .cpp 文件之间传递全局字符串变量?

c++ - Linux,C++,xft : how to use it?

C++ ofstream : Always write onthe 1st line