用static 创建类的单例
1.0 说明
通过函数调用new的static 类对象,由于static 对象只能初始化一次,由此构成单例运行。
2.0 直接代码
代码为windows,win32工程,因为只有一个文件,不上传工程了。直接贴。
// **.cpp : 定义控制台应用程序的入口点。
// /************************************************************************/
/* 通过函数,获取某类为静态类,从而保证单例运行。
* 通过测试,_test_single_和_test_single__2 通过函数get_single_index_class
* 函数来获取的静态对象的指针地址相同,因为对象为静态对象。
/************************************************************************/
//#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h> class base
{
public:
virtual bool func() = 0;
virtual int get_b() = 0;
virtual void set_b(int){
printf("------------------------------this is base class set_b function;\n");
};
protected:
base(){}
};
class Derive :public base
{
public:
Derive& operator= (const Derive& rhs);
bool func();
int get_b();
void set_b(int b_){
printf("------------------------------this is derive class set_b function;\n");
b = b_;
}
void initial(){ b = -1;}
private:
int b; };
bool Derive::func()
{
return true;
}
int Derive::get_b()
{
return b;
} base* get_index_class()
{
return (base*)(new Derive());
} base* get_single_index_class()
{
static Derive* _derive_index = new Derive();
return (base*)(_derive_index);
} base* get_brand_new_single_index_class()
{
static Derive* _derive_index = new Derive();
_derive_index->initial();
return (base*)(_derive_index);
} int main(int argc, char* argv[])
{
/*-------------------------test new ---------------------------------------------*/
base* _test = get_index_class();
_test->set_b(12);
int b = _test->get_b();
printf("input data is : %d,\n",b);
//
base* _test_2 = get_index_class();
int b_2 = _test_2->get_b();
printf("get_b is : %d,\n",b_2); /*-------------------------test single new -----------------------------------------*/
base* _test_single_ = get_single_index_class();
_test_single_->set_b(13);
int b_single = _test_single_->get_b();
printf("single class input data is : %d,\n",b_single);
//
base* _test_single__2 = get_single_index_class();
int b_single_2 = _test_single__2->get_b();
printf("single get_b is : %d,\n",b_single_2); /*-------------------------test single brand-new -----------------------------------------*/
base* _test_brand_new_single_ = get_brand_new_single_index_class();
_test_brand_new_single_->set_b(13);
int b_brand_new_single = _test_brand_new_single_->get_b();
printf("brand_new single class input data is : %d,\n",b_brand_new_single);
//
base* _test_brand_new_single__2 = get_brand_new_single_index_class();
int b_brand_new_single_2 = _test_brand_new_single__2->get_b();
printf("brand_new single get_b is : %d,\n",b_brand_new_single_2); system("Pause");
return 0;
}
3.0 结果
自己留着用。
不足之处,多多指教。非常感谢!
用static 创建类的单例的更多相关文章
- Java基础 static限定符的使用 以及【 static实现的 singleton(单例)设计模式】
static实现的 singleton(单例)设计模式 /** static实现的 singleton设计模式 , 使得一个类只能够创建一个static对象 */ 模板设计结构: package Co ...
- iOS创建安全的单例
创建安全的单例 #import "Singleton.h" @implementation Singleton static Singleton* _instance = nil; ...
- Kotlin对象:仅一行代码就可创建安全的单例
作者:Antonio Leiva 时间:Jun 20, 2017 原文链接:https://antonioleiva.com/objects-kotlin/ Kotlin对象是Android开发人员不 ...
- 适配器、工厂模式、线程池、线程组、互斥锁、Timer类、Runtime类、单例设计模式(二十四)
1.多线程方法 * Thread 里面的俩个方法* 1.yield让出CPU,又称为礼让线程* 2.setPriority()设置线程的优先级 * 优先级最大是10,Thread.MAX_PRIORI ...
- eval、exec及元类、单例实现的5种方法
eval内置函数 # eval内置函数的使用场景:# 1.执行字符串会得到相应的执行结果# 2.一般用于类型转化,该函数执行完有返回值,得到dict.list.tuple等dic_str = ...
- day29 二十九、元类、单例
一.eval.exec内置函数 1.eval函数 eval内置函数的使用场景: ①执行字符串会得到相应的执行结果 ②一般用于类型转换得到dict.list.tuple等 2.exec函数 exec应用 ...
- Python全栈开发之9、面向对象、元类以及单例
前面一系列博文讲解的都是面向过程的编程,如今是时候来一波面向对象的讲解了 一.简介 面向对象编程是一种编程方式,使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” ...
- python基础--反射、元类、单例设计模式
反射:reflect,反射指的是一个对象应该具备可以检测.修改.增加自身属性的能力,反射就是通过字符串操作属性 hasattr(对象,带查询的属性名称) 判断某个对象中是否存在某个属性 getattr ...
- 学好Spark/Kafka必须要掌握的Scala技术点(二)类、单例/伴生对象、继承和trait,模式匹配、样例类(case class)
3. 类.对象.继承和trait 3.1 类 3.1.1 类的定义 Scala中,可以在类中定义类.以在函数中定义函数.可以在类中定义object:可以在函数中定义类,类成员的缺省访问级别是:publ ...
随机推荐
- EditPlus,UltraEdit等编辑器列选择的方法
在使用富文本编辑器的时候,通常模式是行选择状态,由于今天想使用EditPlus列选择状态, 于是通过在网上收集的资料,总结出相关富文本编辑器的列选择的方法. EditPlus 1)菜单:编辑 -&g ...
- C++里的模板
1.泛型编程 --即实现一个通用的标准容器库. 所谓通用的标准容器库,就是要做到:比方List类存放全部肯恩类型的对象这样的事:泛型编程让你编写一个全然一般化并可反复使用的算法,其效率与针对某特定数 ...
- jquery18 css() : 样式的操作
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 蓝桥杯训练 2n皇后
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...
- 83.const与类
const常量对象,无法改变数据,只能引用尾部带const方法 类的成员如果是const,可以默认初始化,也可以构造的初始化,不可在构造函数内部初始化 类中的const成员,无法直接修改,可以间接修改 ...
- storm1.1运行时问题
java.lang.NoClassDefFoundError: org/apache/curator/shaded/com/google/common/cache/CacheBuilder 程序并没有 ...
- linux命令行打开图片
1.用预装的eog eog a.jpg 2.安装 imagemagick display a.jpg
- C/C++(共用体与枚举)
共用(Union)与枚举(Enum) 共同体 c语言中,不同的成员使用共同的存储区域的数据结构类型称为共用体.(共用,联合体),共用体在定义,说明,适用形式上与结构体相似.两者本质上的不同在于使用内存 ...
- logback 生成日志
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender ...
- 【Codeforces Round #426 (Div. 2) A】The Useless Toy
[Link]:http://codeforces.com/contest/834/problem/A [Description] [Solution] 开个大小为4的常量字符数组; +n然后余4,-n ...