小编Pro*_*rof的帖子

使const unique_ptr然后尝试从它移动std :: move会产生与尝试访问复制构造函数时相同的错误

当我们尝试复制a unique_ptr(例如,将一个唯一指针指向另一个)时,我注意到了错误

Error C2280 std::unique_ptr<int,std::default_delete attempting to reference a deleted function ptrTest c:\ptrtest\main.cpp 7
Run Code Online (Sandbox Code Playgroud)
#include <memory>

int main()
{
    std::unique_ptr<int> a = std::make_unique<int>(2);
    std::unique_ptr<int> b = a;
}
Run Code Online (Sandbox Code Playgroud)

这没关系,因为unique_ptr没有定义复制构造函数.您不从唯一指针进行复制以在它们之间移动(转移指针的所有权).

有趣的是(可能没有),这段代码会抛出相同的错误.现在我知道它无效(我将第unique_ptr一个声明为不可变对象),但错误消息暗示它正在尝试调用复制构造函数.那是对的吗?

#include <memory>

int main()
{
    const std::unique_ptr<int> a = std::make_unique<int>(2);
    std::unique_ptr<int> b = std::move(a);
}
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers copy-constructor move-semantics c++11

4
推荐指数
1
解决办法
806
查看次数

获取异步结果死锁(尽管将configure await设置为false)

我正在做一些OAuth工作,我通过提供的异步API方法获取刷新令牌(GetRefreshTokenAsync):

public async Task<Tokens> RenewAuthentication()
{
    AppTokenResult token = await OAuth.GetRefreshTokenAsync("clientid",
      "clientsecret", 
    @"myRefreshToken");

    string accessToken = token.AccessToken;
    string refreshToken = token.RefreshToken;

    return new Tokens(accessToken, refreshToken);

}
Run Code Online (Sandbox Code Playgroud)

如果我像非异步方法那样调用它:

public void noAsync()
{
    var r = RenewAuthentication();
    var x = r.Result;
}
Run Code Online (Sandbox Code Playgroud)

它使应用程序陷入僵局:(.如果我删除第二行(r.Result),那么它可以工作,但那是废话,因为我无法得到结果.我试过阅读

http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

但是在通过向GetRefreshTokenAsync()方法添加.ConfigureAwait(false)来尝试他的方法1后,它没有任何区别.

有什么建议?

c# multithreading deadlock asynchronous async-await

2
推荐指数
1
解决办法
954
查看次数

上下文切换 - makecontext和swapcontext在这里工作(OSX)

我对上下文切换很开心.我已将示例代码复制到文件 http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html

我为OSX定义了宏_XOPEN_SOURCE.

#define _XOPEN_SOURCE 
#include <stdio.h>
#include <ucontext.h>


static ucontext_t ctx[3];


static void
f1 (void)
{
    puts("start f1");
    swapcontext(&ctx[1], &ctx[2]);
    puts("finish f1");
}


static void
f2 (void)
{
    puts("start f2");
    swapcontext(&ctx[2], &ctx[1]);
    puts("finish f2");
}


int
main (void)
{
    char st1[8192];
    char st2[8192];


    getcontext(&ctx[1]);
    ctx[1].uc_stack.ss_sp = st1;
    ctx[1].uc_stack.ss_size = sizeof st1;
    ctx[1].uc_link = &ctx[0];
    makecontext(&ctx[1], f1, 0);


    getcontext(&ctx[2]);
    ctx[2].uc_stack.ss_sp = st2;
    ctx[2].uc_stack.ss_size = sizeof st2;
    ctx[2].uc_link = &ctx[1];
    makecontext(&ctx[2], f2, 0);


    swapcontext(&ctx[0], &ctx[2]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我建造它

gcc -o …

c macos context-switch ucontext

2
推荐指数
1
解决办法
1099
查看次数

在返回值上调用std :: move - 签名应该是什么

考虑

class X
{
public:
    std::unique_ptr<int> m_sp;
    A m_a;

    A test1()
    {
        return std::move(m_a);
    }

    A&& test2()
    {
        return std::move(m_a);
    } 

    std::unique_ptr<int> test3()
    {
        return std::move(m_sp);
    }

    std::unique_ptr<int>&& test4()
    {
        return std::move(m_sp);
    }

    std::unique_ptr<int> test5()
    {
        return std::make_unique<int>(50);
    }
};

class A
{
public:
    A()
    {
        m_i = 1;
    }

    A(A&& other)
    {
        this->m_i = other.m_i;
        other.m_i = -1;
    }

    A& operator=(A&& other)
    {
        this->m_i = other.m_i;
        other.m_i = -1;
        return *this;
    }

    int m_i;
};
Run Code Online (Sandbox Code Playgroud)

练习这些课程

X x;
A …
Run Code Online (Sandbox Code Playgroud)

c++ move rvalue-reference c++11

2
推荐指数
1
解决办法
104
查看次数

内部吸气剂,公共设定者c#

我基本上想做这样的事情

public string Password
{
  set { password = value; }
}

internal string Password
{
  get { return password; }
}
Run Code Online (Sandbox Code Playgroud)

但是不必调用我的第二个函数别的东西(上面的代码不能编译,因为我使用了密码两次).我可以有setPassword和getPassword,但这似乎有点,好吧,垃圾:(

我的场景是我有一个包含核心业务逻辑的独立程序集(类库).我不希望任何使用类库的项目一旦设置就能查看密码.

c# getter setter public internal

0
推荐指数
1
解决办法
2402
查看次数

正确且正确地将控件/ UIElement可见性绑定到Property MVVM C#WPF

我是MVVM的新手,我一直在构建我的ViewModel.我有一个ViewModel,它包含一个ICommand,然后通过命令按钮绑定到我的View中.该ICommand原因的过程对我的视图模型,然后调用进一步大幅缓慢的过程被调用.在执行此过程时,我想让控件UIElement的可见性变为可见,然后在过程完成后隐藏(我打算绑定标签并确定进度条的可见性)

例如,在我的视图模型中,我有

public void calledFromCommandButton() {
RaisePropertyChange("Starting");
superLongProcedure();
RaisePropertyChange("Finished");

}
Run Code Online (Sandbox Code Playgroud)

这只是感觉有点傻,不得不提出2个不同的属性变化,因此,我认为我做错了.我想我可以通过一个属性更改和转换器来实现吗?

那么,将UIElement可见性绑定到属性更改事件的正确和正确方法是什么?

谢谢托马斯

c# wpf binding mvvm viewmodel

0
推荐指数
1
解决办法
1601
查看次数

使用copy_if将std :: string复制到另一个字符串中

我想知道什么是选择性地将_if字符从一个字符串复制到另一个字符串的最佳方法。我有类似的东西

string buffer1("SomeUnknownwSizeAtCompileTime");
string buffer2; // WillBeAtMostSameSizeAsBuffer1ButMaybeLessAfterWeRemoveSpaces
buffer2.resize(buffer1.length());
std::copy_if(buffer1.begin(), buffer1.end(), buffer2.begin(), [](char c){
            //don't copy spaces
            return c != ' ';
});
Run Code Online (Sandbox Code Playgroud)

buffer2可能比buffer1小很多,但是我们必须分配与buffer1的长度相同的内存量。但是,复制后,buffer2的结束迭代器将指向空终止符。我到处搜索,显然这是设计使然,所以现在我想知道我是否应该对字符串不使用copy_if?

谢谢

c++ arrays copy stdstring

0
推荐指数
1
解决办法
163
查看次数

为什么容器需要const

为什么我要购买C2440

for(box& b : uset)
Run Code Online (Sandbox Code Playgroud)

错误C2440“正在初始化”:无法从“常量框”转换为“框&”

在将“ box&”类型​​的绑定引用绑定到“ const box”类型的初始化程序时,出现错误(活动)E0433限定符

class box
{
public:
    int i = 1;
    bool operator==(const box& other) const
    {
        return true;
    }
    bool operator!=(const box& other) const
    {
        return !(*this == other);
    }

};

namespace std {

    template<>
    struct hash<box>
    {
        size_t operator()(const box& boxObject) const
        {
            return boxObject.i;
        }
    };
}

int main()
{
    std::unordered_set<box> uset;
    for (box& b : uset)
    {

    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我很困惑,好像要引用它一样const box,问题就消失了。如果我换成unordered_seta,vector那不是问题。我不确定这是怎么回事。有人可以帮我解释一下吗。这对关联容器来说特别吗?我看到它也会发生 …

c++ for-loop stl

0
推荐指数
1
解决办法
60
查看次数