Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;初始化器\u列表和共享\u ptr行为 我正在测试VS2013 C++初始化文件列表。_C++_Visual Studio 2013_Initializer List - Fatal编程技术网

c++;初始化器\u列表和共享\u ptr行为 我正在测试VS2013 C++初始化文件列表。

c++;初始化器\u列表和共享\u ptr行为 我正在测试VS2013 C++初始化文件列表。,c++,visual-studio-2013,initializer-list,C++,Visual Studio 2013,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

下面的代码可以编译。 但当我运行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;
}
我期望这样的输出。 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. 
但是,看起来是这样的

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});
DoSomething({std::make_shared(),ip});
这是vs2013初始值设定项列表的错误还是正常行为

这是vs2013初始值设定项列表的错误还是正常行为

两人都同意。VS2013的
std::initializer_list
实现有缺陷;请参阅类似的问题和

2013年11月,有人向Microsoft报告了其中一个问题:

现在,这在Spring更新中已修复:

这看起来确实像一个bug。重复?