当我们尝试复制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) 我正在做一些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后,它没有任何区别.
有什么建议?
我对上下文切换很开心.我已将示例代码复制到文件 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 …
考虑
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) 我基本上想做这样的事情
public string Password
{
set { password = value; }
}
internal string Password
{
get { return password; }
}
Run Code Online (Sandbox Code Playgroud)
但是不必调用我的第二个函数别的东西(上面的代码不能编译,因为我使用了密码两次).我可以有setPassword和getPassword,但这似乎有点,好吧,垃圾:(
我的场景是我有一个包含核心业务逻辑的独立程序集(类库).我不希望任何使用类库的项目一旦设置就能查看密码.
我是MVVM的新手,我一直在构建我的ViewModel.我有一个ViewModel,它包含一个ICommand,然后通过命令按钮绑定到我的View中.该ICommand原因的过程对我的视图模型,然后调用进一步大幅缓慢的过程被调用.在执行此过程时,我想让控件UIElement的可见性变为可见,然后在过程完成后隐藏(我打算绑定标签并确定进度条的可见性)
例如,在我的视图模型中,我有
public void calledFromCommandButton() {
RaisePropertyChange("Starting");
superLongProcedure();
RaisePropertyChange("Finished");
}
Run Code Online (Sandbox Code Playgroud)
这只是感觉有点傻,不得不提出2个不同的属性变化,因此,我认为我做错了.我想我可以通过一个属性更改和转换器来实现吗?
那么,将UIElement可见性绑定到属性更改事件的正确和正确方法是什么?
谢谢托马斯
我想知道什么是选择性地将_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?
谢谢
为什么我要购买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那不是问题。我不确定这是怎么回事。有人可以帮我解释一下吗。这对关联容器来说特别吗?我看到它也会发生 …