c++ - 我应该如何存储对象

标签 c++ qt

我有一个类叫做 human包含 int age, int height 等信息, QString name等..

用户单击按钮以添加新的人类信息,程序会在用户输入信息时创建新的人类对象(例如,john、johan...)。

我想存储所有对象然后我希望能够访问每个单独的对象及其成员。什么是最好的存储对象?

我想的是声明static std::vector<human*> humanVector;在头文件上

然后

humanVector.push_back( new human(name, age, height));

听起来是否正确,或者我需要用不同的方式来做或使用不同的 decleration,比如 static std::vector<std::shared_ptr<human>> humanVector;

最佳答案

如果使用静态 std::vector<human*> humanVector; , 需要确保在 vector 作用域之前释放 vector 中的对象,否则会导致内存泄漏问题。

使用 std::vector<std::shared_ptr<human>> humanVector;是异常安全的,它负责破坏对象。 std::shared_ptr 是一个智能指针,通过指针保留对象的共享所有权。当发生以下任一情况时,对象将被销毁并释放其内存: 拥有该对象的最后一个剩余的 shared_ptr 被销毁。 拥有该对象的最后一个剩余的 shared_ptr 通过 operator= 或 reset() 分配另一个指针。

关于c++ - 我应该如何存储对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20043669/

相关文章:

c++ - Windows 上的 Clang/LLVM 6.0.0 不需要静态数据成员声明的定义

c++ - 两个线程使用相同的 websocket 句柄——这会导致任何问题吗?

c++ - 如何以编程方式更改布局中小部件的顺序?

c++ - 如何在 macOS 上为 Qt 窗口使用 Objective-C 变量和方法?

c++ - 科学程序员的阅读 list

c++ - C++ 中的运算符 (::Type*)0 是什么意思

c++ - 等轴测图,鼠标 pos->tile 坐标公式中的坐标不正确

c++ - 如何在 QString.arg() 中使用我的枚举?

qt - 向 QQuickItem 添加背景图像

Qt 和 unicode 转义字符串