小编Ray*_*ann的帖子

std::destroy_at 主要编译器之间的差异?

使用编译器资源管理器:

#include <iostream>
#include <memory>

struct test
{
  test(int i)
  {
    std::cout << "test::test("<<i<<")\n";
  }
  ~test()
  {
    std::cout << "~test()\n";
  }
};

template<>
void std::destroy_at(test* p) 
{
  std::cout<<"std::destroy_at<test>\n";
  p->~test();
}

int
main ()
{
  auto sp = std::make_shared<test>(3);
  return 33;
}
Run Code Online (Sandbox Code Playgroud)

使用带有 gcc x86-64 或 clang x86-64 的 C++20 给出预期输出:

Program returned: 33
test::test(3)
std::destroy_at<test>
~test()
Run Code Online (Sandbox Code Playgroud)

但 x64 msvc v19.32 给出:

Program returned: 33
test::test(3)
~test()
Run Code Online (Sandbox Code Playgroud)

好像 std::destroy_at 在这里没有效果。

这是符合行为、我的误解还是 msvc 不符合或配置错误?

c++ gcc std clang visual-c++

0
推荐指数
1
解决办法
76
查看次数

标签 统计

c++ ×1

clang ×1

gcc ×1

std ×1

visual-c++ ×1