小编sma*_*uck的帖子

移动构造函数似乎没有执行

这是我第一次使用C++ 0x rvalue引用进行实验,似乎有些奇怪的事情正在进行中.

在下面的代码示例中,factory函数MakeWindow按值返回Window对象.调用者使用它来初始化Window对象.如果我理解正确,这应该调用移动构造函数.为了检测到这一点,我在那里抛出异常.最重要的是我禁用了复制构造函数:

#include <iostream>


// Fake WinAPI
typedef void* HWND;
HWND CreateWindow() { return (void*)1; }
void DestroyWindow(HWND) { }
// End WinAPI


// C++ WinAPI Wrapper Library
class Window
{
public:
    Window(HWND inHandle) :
        mHandle(inHandle)
    {
        std::cout << "Window constructor. Handle: " << inHandle << std::endl;
    }

    Window(Window && rhs) :
        mHandle(rhs.mHandle)
    {
        std::cout << "Window move constructor. Handle: " << mHandle << std::endl;
        rhs.mHandle = 0;
        throw 1; // this is my "breakpoint"
    } …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

12
推荐指数
1
解决办法
610
查看次数

错误地使用移动的值

转移到C++ 11后,我现在系统地在构造函数中按值传递我的字符串.但是现在,我意识到当使用构造函数体中的值时,它更容易引入错误:

class A(std::string val):
  _val(std::move(val))
{
  std::cout << val << std::endl; // Bug!!!
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能减少弄错的可能性?

c++ move-semantics c++11

5
推荐指数
1
解决办法
268
查看次数

标签 统计

c++ ×2

c++11 ×2

move-semantics ×1