小编Mik*_*ike的帖子

std :: make_shared在VS2012中进行两次构造函数调用

我写了一段简单的代码来试用C++ 11的make_shared.当我打电话时,我不明白为什么

std::shared_ptr<MyClass> x = std::make_shared<MyClass>(MyClass());
Run Code Online (Sandbox Code Playgroud)

调用默认构造函数并调用移动构造函数.这看起来很好,因为移动构造函数不会创建副本.但是如果我注释掉MyClass的move构造函数的实现,它会调用默认的构造函数,然后是复制构造函数,这似乎打败了make_shared的目的.

#include <iostream>
#include <memory>

//-----------------------------------------------------------

class MyClass {

public:

    // default constructor
    MyClass() :
            _data(0.0) 
    {
            _data = (float)3.14;

            std::cout << "MyClass::default constructor - data=" << _data << " ; class=" << this << std::endl;
    };

    // copy constructor
    MyClass(const MyClass& input)
    {
            _data = input._data;

            std::cout << "MyClass::copy constructor - data=" << _data << " ; class=" << this << std::endl;
    };

    // move constructor
    MyClass(MyClass&& other)
    {
            std::cout << "MyClass::move constructor(before) …
Run Code Online (Sandbox Code Playgroud)

c++ constructor c++11 visual-studio-2012

3
推荐指数
1
解决办法
1149
查看次数

标签 统计

c++ ×1

c++11 ×1

constructor ×1

visual-studio-2012 ×1