在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式。单例模式分为懒汉模式,跟饿汉模式两种。首先给出饿汉模式的实现template <class T>
class singleton
{
private:singleton(){};singleton(const singleton&){};//禁止拷贝singleton& operator=(const singleton&){};//禁止赋值static T* m_instance;
public:static T* GetInstance();
};template <class T>
T* singleton<T>::GetInstance()
{return m_instance...
#include <iostream> using namespace std;class A{ public: void myfunc(){ cout << "A myfunc" << endl; } virtual void mytest(){ cout << "A mytest" << endl; }};class B:public A{ public: ...
前面两节,说明了右值引用和它的作用。下面通过一个string类的编写,来说明右值引用的使用。相对于C++98,主要是多了移动构造函数和移动赋值运算符。先给出一个简要的声明:class String
{
public:String();String(constchar *s); //转化语义String(const String &s);String(String &&s);~String();String &operator=(const String &s);String &operator=(String &&s);friend ostream &operator<<(ostream &os, const String &s){r...
参见脚本之家:http://www.jb51.net/article/37847.htm 在C++中,可以把0当成bool类型的false,也可以当做int中的数字0.则表示C++不是类型安全语言。类似的,MFC中的CString也不是类型安全的类。因为其他类型的数据可以通过CSting中的成员函数Format转换成CString。 1 #include<iostream>2 3usingnamespace std;4 5bool fun()//函数返回类型是bool,但是我们在函数中可以返回int类型。 6 {7return1;8 }910void main()
11 {
12int a...
如下程序:#include <iostream>
usingnamespace std;
int main()
{ char ch1[10];strcpy(ch1,"123456");
}在VS2012上面编译时会报错:error C4996: ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead. 在VS2010中,有众多的系统函数名都追加了_s,比如scanf_s(),strcmp_s()等等。_s表示这个方法是安全的 (safe),原来的函数对字符串的长是忽略的,可能溢出,这些加_s的方法对长度进行判断...
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 开源是一种精神,更是一种合作共赢的模式。不过如今的开源生态虽然得以让诸多的程序员、技术人们学习、修改以及以任何目的向任何人分发开源软件,但是这并不意味着足够的安全。在本文中,我们将从最新发布的《开源漏洞管理现状》中深入了解开源组件安全的现状与趋势。作者 | whitesource译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CS...
库目的
1、C++基础库,跨平台。目前在windows开发,还没cmake,欢迎大神来cmake或makefile。
2、集合挑选已有的开源库。
3、封装常用的功能,并提供友好的接口。
4、代码重用,避免每次要用都要花时间精力找代码封装。
库代码获取
已开源,开源许可MIT,可免费商用。
github仓库:https://github.com/zhuguohua/zgh
gitee仓库(从github导入):https://gitee.com/zhu_myroom/zgh
----欢迎大家参与使用,提需求、提交代码增加功能,...
相信有很多同学在面对多线程代码时都会望而生畏,认为多线程代码就像一头难以驯服的怪兽,你制服不了这头怪兽它就会反过来吞噬你。
夸张了哈,总之,多线程程序有时就像一潭淤泥,走不进去退不出来。
可这是为什么呢?为什么多线程代码如此难以正确编写呢?
从根源上思考
关于这个问题,本质上是有一个词语你没有透彻理解,这个词就是所谓的线程安全,thread safe。
如果你不能理解线程安全,那么给你再多的方案也是无用武之地。
接...
线程安全
线程安全函数:当一个函数被多个并发线程反复调用的时候,它的结果始终是正确的
一般线程不安全的情况,是由于同一个进程的不同线程共享进程内存空间中的全局/静态存储区和堆,如果一个函数中包含全局变量和静态变量,那么可能会线程不安全,导致程序错误。但是如果对全局变量和静态变量的操作只有读,没有修改的话,也可以将这个函数看做是线程安全的。
C++多线程(C++11)
多线程demo
C++11的标准库,提供了多线程库,需...
一、废话少说,上代码,安全队列
#pragma once
#include <queue>
#include <memory>
#include <mutex>
#include <condition_variable>template <typename T>
class SafeQueue
{
private:mutable std::mutex mMutex;std::queue<T> mQueue;std::condition_variable mCond;public:SafeQueue() {}SafeQueue(SafeQueue const &other){std::lock_guard<std::mutex> lk(other.mMutex);mQueue = other.mQueue;}void push(T new_value){std:...
不要动态地处理数组这里主要有两个意思:不用支持动态地基类的指针进行++、+n这种操作,因为它实际会按基类大小进行偏移计算,而非预期地按照子类的大小进行偏移计算;2.尽量在接口中使用引用而非指针,原因就在于期望清楚地表面所讨论的是一个对象,而不是对象数组;不要使用失效对象经常容易忽略的失效对象包括:语义失效对象:指向已删除对象的虚悬(dangling)指针
失效的迭代器:比如,在迭代器所指向的容器开始插入之后的vec...
1 教科书里的单例模式我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。上代码: class singleton
{
protected:singleton(){}
private:static singleton* p;
public:static singleton* instance();
};
singleton* singleton::p = NULL;
singleton* si...
一段继承代码中的重复模式是,只要其中一个函数返回某个值,就会调用一系列函数并中止链.然后该值应用于后续计算.为了演示,破坏值为0.请考虑以下程序:#include <stdio.h>static int n;static int foo(int x)
{fprintf(stderr, "%d(%d) ", x, n++);return x ? 0 : n;
}static void with_if(void)
{int rc;n = 0;do {if( (rc = foo(1)) ) break;if( (rc = foo(2)) ) break;if( (rc = foo(3)) ) break;if( (rc = foo(4)) ) break;if( (...
我想为空安全指针访问编写一个C/C++宏.我目前有这个,效果很好:#define NULL_SAFE(p, e) if (p) p->e
NULL_SAFE(myPtr, myMethod(myArg));但我真正想要的是拥有这样的东西:NULL_SAFE(myPtr, myMethod(myArg),myOtherPtr, myOtherMethod(myOtherArg),yetAnotherMyPtr, plsStopMethod(grArg),...
);这将扩展到:if (myPtr) myPtr->myMethod(myArg);if (myOtherPtr) myOtherPtr->myOtherMethod(myOtherArg);if (yetAnotherMyPtr) yet...
我正在尝试将C/C++LI代码移植到Verifiable Type-Safe C/C++LI代码中(使用clr:safe标志),这样我就可以得到一个AnyCPU程序集.我发现的主要编译问题是,我得到了很多C4956错误,我想,这可能是通过明确地告诉编译器我希望这是不安全的.建议?解决方法:这已经涵盖here
基本上,这是/ clr:pure应该提供的,因为它还生成一个纯MSIL程序集.不幸的是,它仍然会导致对特定位的依赖,因此与AnyCPU不兼容.