学习C++,所以要温柔:)...
我一直主要使用堆变量(来自 C)来设计我的应用程序,所以我设计了这样的结构:
QList<Criteria*> _Criteria;
// ...
Criteria *c = new Criteria(....);
_Criteria.append(c);
在我的程序中,我一直在传递指向特定条件的指针,或者通常是列表。所以,我有一个这样声明的函数:
QList<Criteria*> Decision::addCriteria(int row,QString cname,QString ctype);
Criteria * Decision::getCriteria(int row,int col)
它将一个条件插入到列表中,并返回列表以便我的 GUI 可以显示它。
我想知道我是否应该以某种方式使用引用。因为我一直想要那个确切的标准,我应该这样做吗:
QList<Criteria> _Criteria;
// ....
Criteria c(....);
_Criteria.append(c);
...
QList<Criteria>& Decision::addCriteria(int row,QString cname,QString ctype);
Criteria& Decision::getCriteria(int row,int col)
(不确定后一行在语法上是否正确,但你明白了)。
所有这些项目都是特定的、准全局的项目,它们是我程序的核心。
所以,问题是:我当然可以分配/释放我所有的内存,而不会出现我现在使用的方法中的问题,但是还有更多的 C++ 方法吗?引用资料会是更好的选择吗(在我这边改变还为时不晚)。
TIA
迈克
最佳答案
我会返回 QList<Criteria>
作为普通值。 QList
是 Qt 的共享类之一,这意味着它的内部表示在多个实例之间共享,只要它们都没有被修改。
如果Criteria
类相当复杂,因此由于其中一个列表在某个时候被修改而进行的偶然复制会导致明显的开销,那么我会使用 QSharedData
在执行Criteria
这样它也只在需要时才被复制。
这种方法有两个缺点:第一,复制(如果有的话)是隐式的,并且可能会在您不期望的时候发生;第二,它不允许对 Criteria
进行多态使用。 .如果你有 Criteria
作为类层次结构的根,则必须使用指针。在那种情况下,我会使用 shared_ptr
来自 Boost 或 C++ TR1 以避免内存管理麻烦,或制作 Critera
公开继承自 QObject
并使所有Critera
Decision
的对象子项.
关于c++ - 最佳实践 : QT4 QList<Mything*>. .. 在堆上,或 QList<Mything> 使用引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2533167/