我有一个关于C++ 11最佳实践的问题.清除shared_ptr时,我应该使用reset()没有参数的函数,还是应该设置shared_ptr为nullptr?例如:
std::shared_ptr<std::string> foo(new std::string("foo"));
foo.reset();
foo = nullptr;
Run Code Online (Sandbox Code Playgroud)
是否存在任何真正的差异,或者两种方法都存在优势/劣势?
我想知道,在C++ 11中只能将原始数据类型声明为std :: atomic吗?例如,是否有可能声明库类对象被"原子地"变异或访问?
例如,我可能有
using namespace std::chrono;
time_point<high_resolution_clock> foo;
// setter method
void set_foo() {
foo = high_resolution_clock::now();
}
// getter method
time_point<high_resolution_clock> get_foo() {
return foo;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果在不同的线程中调用这些setter和getter方法,我认为这可能会导致未定义的行为.如果我可以声明foo之类的话会很好:
std::atomic<time_point<high_resolution_clock>> foo;
Run Code Online (Sandbox Code Playgroud)
......所以foo上的所有操作都将以原子方式进行.在我的项目的应用程序中,可能有数百个这样的foo变量在几十个类中声明,我觉得使对象变异并访问"原子"可以说更方便,而不必声明和lock_guard遍布整个地方的互斥体.
这是不可能的,还是有更好的方法,或者我真的必须在任何地方使用互斥锁和lock_guard吗?
更新:
目前,Windows 8.1让用户跳过篮球以达到管理蓝牙连接的设置(Charms-> Settings-> Change PC Settings-> PC and Devices-> Bluetooth-> On/Off).我想知道,有没有办法以编程方式从命令提示符打开/关闭蓝牙?我只想编写代码,基本上可以完成Windows操作系统在该设置屏幕上所做的操作,只需打开/关闭蓝牙即可.
我不想像某些人建议的那样只是简单地设置设置的快捷链接.我正在挑战自己编写一个可以做到这一点的脚本或程序,但是这几天我用Google搜索了网络以获取信息,此时我不确定它是否可以完成.我甚至尝试安装一个名为"蓝牙命令行工具"的Windows蓝牙命令行库,并尝试使用他们的"btconfig -c0"命令,但它似乎不起作用.我是否可以采用一种语言/方法/方法来实现这一目标?谢谢!
我有一个或许是一个非常有问题的问题,我环顾四周但是还没有看到直接的答案,我想我可以在这里得到一个快速的答案.在使用bsd套接字的简单TCP/IP客户端 - 服务器选择循环中,如果客户端发送两条同时到达服务器的消息,那么在服务器上调用recv会返回在缓冲区中捆绑在一起的两条消息,或者是不同的到达消息要单独阅读?
我问,因为我在一个环境中工作,我无法告诉客户端如何构建要发送的消息.通常recv报告读取12个字节,然后是915,然后是12个字节,然后是915,依此类推,这种交替的12到915模式......但有时它会报告927(即915 + 12).我以为客户端在将其发送到服务器之前将其中的一些信息捆绑在一起,或者在调用recv之前消息到达然后recv同时拉出所有挂起的字节.所以我想确保我理解recv的行为.我想也许在我的理解中我错过了一些东西,我希望有人能指出来,谢谢!
c++11 ×2
atomic ×1
bluetooth ×1
c++ ×1
command-line ×1
mutex ×1
nullptr ×1
object ×1
recv ×1
reset ×1
shared-ptr ×1
sockets ×1
windows-8.1 ×1