我的问题类似于this one,但我没有找到我需要的信息。我有我的类构造函数。
CustomTreeViewItem::CustomTreeViewItem(CustomTreeView* list)
: m_childs(), m_expanded(false), m_list(list), m_components(), m_depth(1),
m_rect(), m_root(this)
{}
我在构造函数中使用this
指针但不调用任何方法,所以我不调用未定义的行为。所以一切都很好,但我收到警告,现在我正在编写一些lib(小框架)所以我必须编写无错误的代码。所以我已将代码更改为:
CustomTreeViewItem::CustomTreeViewItem(CustomTreeView* list)
: m_childs(), m_expanded(false), m_list(list), m_components(), m_depth(1),
m_rect(), m_root(NULL)
{
m_root = this;
}
现在我没有得到任何警告,但是这样我失去了表现(非常轻微,但无论如何都是失败)。我想问一下是否有任何方法可以保持最高性能并防止出现此警告。
答案 0 :(得分:5)
如果仅存储指针供以后使用,标准保证这是完全安全的。
您可能需要使用pragma来禁用警告。并且警告控制是不可移植的(其他编译器可能会忽略您的编译指示并继续发出警告)。
答案 1 :(得分:1)
首先,编译器不应该抱怨,接下来是代码的替代版本,m_root
设置为NULL
(应该是nullptr
并且稍后到this
很可能根本不会产生性能影响。任何优化编译器都应该能够将两个写入合并到this
的单个写入中。看一下装配。即使触发了额外的写入,变量也是 hot ,所以它只是一个L1写入,而且成本不会很明显。