我写了一段简单的代码来试用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)