这被认为是不好的风格(在建筑师之外的标题中做新的事情)?
class ClassName : public QWidget
{
Q_OBJECT
public:
explicit ClassName(QWidget* parent = 0);
CustomList<Identifier*>*const identifier_list = new CustomList<Identifier*>("someString");
};
我想要实现的目标是不必在任何地方写if (identifier_list == NULL)
。像这样,identifier_list不能为NULL。
答案 0 :(得分:0)
由于默认的成员初始化程序,当然只能在C ++ 11及更高版本中使用。但是,通过写这个,你是now required to provide (or =delete
) your copy/move constructors and assignment operators。更不用说要删除这个内存的析构函数。
这意味着您必须决定要拥有的复制行为。您是否想要允许复制(如果没有,您必须使用=delete
来表示)?如果是这样,副本应该做什么?由于它是指针const,因此您无法复制指针本身。至少,不在复制分配的情况下。因此,如果你正在复制,你现在必须复制指向的对象。
感谢你的指针 - const,移动是不可能的(没有const_cast
)。所以你的移动构造函数/赋值必须移动CustomList<Identifier*>
对象,而不仅仅是指向它的指针。
此外,由于所有这些用户定义的操作,您的ClassName
将不再被视为一种简单的可复制类型。虽然它存储了一个链表,但它可能不会轻易地复制。
那么这被认为是不好的风格吗?一切都是平等的,是的。除非你有一个真正的,经过深思熟虑的理由使用动态分配,否则它更好,最终更安全的编程风格,只是让它成为一个值而不是一个指针:
CustomList<Identifier*> identifier_list("someString");