C++ C++;生成器:警告位于<;记忆>;标题

C++ C++;生成器:警告位于<;记忆>;标题,c++,stl,c++builder,compiler-warnings,C++,Stl,C++builder,Compiler Warnings,我使用Embacadero C++Builder。我有以下问题: 我曾经遵循这些指导原则,在编译过程中尽量避免出现警告(通过修复代码,而不是禁用警告) 我还使用std::unique\u ptr 但事实证明std::unique_ptr的实现有一个bug(至少它在发布模式下的32位平台上触发了警告,当我查看实现时,它似乎不是百分之百正确的) 细节(示例代码)。我尝试在发行版配置中使用32位编译器构建以下代码 #include <memory> using namespace std;

我使用Embacadero C++Builder。我有以下问题:

我曾经遵循这些指导原则,在编译过程中尽量避免出现警告(通过修复代码,而不是禁用警告)

我还使用
std::unique\u ptr

但事实证明std::unique_ptr的实现有一个bug(至少它在发布模式下的32位平台上触发了警告,当我查看实现时,它似乎不是百分之百正确的)

细节(示例代码)。我尝试在发行版配置中使用32位编译器构建以下代码

#include <memory>
using namespace std;

int main()
{
    unique_ptr<int> myUniqueInt;
    int * myInt = new int(5);
    myUniqueInt  = unique_ptr<int>(move(myInt));
    return 0;
}
我们可以看到,如果this==&u Right,那么函数不会返回任何值,因此警告是正确的

我的问题如下:

  • 为什么在调试配置中不触发警告-它仅在发布时触发
  • 如何克服这一问题,而不放弃全局“将警告视为错误”,也不全局禁用此警告
  • 注:

    • 该警告仅在发布配置中显示
    • XE6和XE8版本的C++Builder上存在警告
    • 64位编译器没有警告(这是预期的,因为编译器不同)
    提前谢谢

    如何克服这一问题,而不放弃全局“将警告视为错误”,也不全局禁用此警告


    您必须编辑
    本身才能更正错误。然后您应该向STL供应商()提交一份错误报告。

    注意,您不需要
    std::move
    <代码>唯一密码(myInt)会很好,
    unique\ptr myUniqueInt(新的int(5))
    更好,
    unique\ptr myUniqueInt=make\u unique(5)
    如果你有独特的make_,那就更好了。谢谢。你当然是对的。我最初的示例使用两个
    唯一的\u ptr
    对象,这是必需的。简化示例时,我忘了删除它。我知道
    make_unique
    ,但我没有它(如果我没有弄错的话,它只在C++14中可用,也就是说,只在最新版本的编译器中可用)。请参阅,以获取可以放入项目中的
    make_unique()
    的实现。这真的很简单。嗯,也许,这是最正确的行动方式。尽管如此,在“标准”库中修复bug本身的问题在于,为所有开发人员分发修复程序并不容易,因为这些开发人员可能会使用此项目。。。
    _Myt& operator=(_Myt&& _Right)
        {   // assign by moving _Right
        if (this != &_Right)
            {   // different, do the move
            reset(_Right.release());
            this->get_deleter() = _STD move(_Right.get_deleter());
            return (*this);
            }
        }