gpt4 book ai didi

c++ initializer_list 和 shared_ptr 行为

转载 作者:可可西里 更新时间:2023-11-01 16:45:58 25 4
gpt4 key购买 nike

<分区>

我正在测试 vs2013 c++ initializer_list。

下面的代码可以编译。但是当我运行 exe 时崩溃。

#include <memory>
#include <iostream>

class Base {};

class Derived : public Base {};

void DoSomething(std::initializer_list<std::shared_ptr<Base> > list)
{
}

int main()
{
auto ip = std::make_shared<Derived>();

std::cout << "use_count=" << ip.use_count() << std::endl;

DoSomething({ip, std::make_shared<Derived>()}); // ng
// DoSomething({ip, std::make_shared<Base>()}); // ok
// DoSomething({std::make_shared<Derived>(), ip}); // ok

std::cout << "use_count=" << ip.use_count() << std::endl;
}

编译。

C:\...>cl.exe /EHsc test.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 18.00.21005.1 for x86
Copyright (C) Microsoft Corporation. All rights reserved.

test.cpp
Microsoft (R) Incremental Linker Version 12.00.21005.1
Copyright (C) Microsoft Corporation. All rights reserved.

/out:test.exe
test.obj

C:\...>

我期望这样的输出。g++4.8.2 是这样工作的。

c:\...>test.exe
use_count=1
use_count=1

但是,看起来像这样。

c:\...>test.exe
use_count=1
use_count=0 // or some random value like 3719232 and displayed crash dialog.

并且,修改上面的一行代码,效果很好。

DoSomething({std::make_shared<Derived>(), ip});

这是 vs2013 initializer_list 的错误还是正常行为?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com