相关疑难解决方法(0)

C++ 11移动构造函数未调用,默认构造函数首选

假设我们有这个类:

class X {
public:
    explicit X (char* c) { cout<<"ctor"<<endl; init(c); };
    X (X& lv)  { cout<<"copy"<<endl;  init(lv.c_); };
    X (X&& rv) { cout<<"move"<<endl;  c_ = rv.c_; rv.c_ = nullptr; };

    const char* c() { return c_; };

private:
    void init(char *c) { c_ = new char[strlen(c)+1]; strcpy(c_, c); };
    char* c_;

};
Run Code Online (Sandbox Code Playgroud)

以及此示例用法:

X x("test");
cout << x.c() << endl;
X y(x);
cout << y.c() << endl;
X z( X("test") );
cout << z.c() << endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

ctor …
Run Code Online (Sandbox Code Playgroud)

c++ move-semantics c++11

21
推荐指数
1
解决办法
5525
查看次数

标签 统计

c++ ×1

c++11 ×1

move-semantics ×1