2

我的问题与类似,但我没有找到我需要的信息。我有我的类构造函数。

CustomTreeViewItem::CustomTreeViewItem(CustomTreeView* list) 
    : m_childs(), m_expanded(false), m_list(list), m_components(), m_depth(1), 
    m_rect(), m_root(this)
{}

this在构造函数中使用指针,但不从中调用任何方法,因此我不调用未定义的行为。所以一切都很好,但是我收到了警告,现在我正在编写一些库(小框架),所以我必须编写无错误的代码。所以我把我的代码改成这样:

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;
}

现在我没有收到任何警告,但是以这种方式我失去了性能(非常轻微,但无论如何它是损失)。我想问是否有任何方法可以保持最高性能并防止此警告。

4

2 回答 2

5

如果指针只存储供以后使用,标准保证这是完全安全的。

您可能需要使用编译指示来禁用警告。并且警告控制是不可移植的(其他编译器可能会忽略您的编译指示并继续警告)。

于 2013-09-23T13:54:24.717 回答
1

第一件事是编译器不应该抱怨这一点,接下来是代码的替代版本,其中m_root设置为NULL(应该是nullptr)和后来的设置this很可能根本不会对性能产生影响。任何优化编译器都应该能够将两个写入合并为一个带有this. 看看组装。即使这触发了额外的写入,变量也是hot,所以它只是 L1 写入并且成本不会明显。

于 2013-09-23T13:58:20.067 回答