如何限制类仅能创建一个对象

方法一:

利用引用计数:

#include <iostream>  
using namespace  std;  
  
class  Object  
{  
  
public:  
     
    ~Object()  
    {  
        count=1;  
  
    }  
     Object()  
     {  
         if (count==0)  
         {  
             cout<<"该类只能创建一个对象!";  
             return ;  
         }  
         --count;  
  
          
     }  
  
private:  
    static int count;  
  
};  
int Object::count=1;    
int main()  
{    
    Object b;        
    return 0;    
}

方法二:利用友元函数

#include <iostream>  
using namespace  std;  
  
class  Object  
{  
  
public:  
    ~Object(){}  
  
  
private:  
    Object(){}  
    Object(const Object&){}  
    Object& operator =(const Object &){}  
    friend Object& CreateObject()  
    {  
        static Object a;  
        return a;  
    }  
};  
  
  
  
int main()  
{    
  return 0;    
}
时间: 2024-10-12 16:20:48

如何限制类仅能创建一个对象的相关文章

怎么编写可以把一个类中只能创建一个对象

static关键字可以限定一份: class Person{ String name; private Person(){};//私有化构造函数,禁止外部创建对个本类的对象 static Person p=new Person();//在本类中创建一个对象,因为下面一个普通方法在应用程序中直接类名.方法名:那么 //直接在上面添加static关键字,使之变成静态方法. public static Person getInstance(){  return p;//返回到上面的对象.具体就是把内存

C++只能允许类创建一个对象的做法

方法一: 利用引用计数: #include <iostream> using namespace std; class Object { public: ~Object() { count=1; } Object() { if (count==0) { cout<<"该类只能创建一个对象!"; return ; } --count; } private: static int count; }; int Object::count=1; int main() {

[Swift] 创建一个对象

创建一个对象 先写一个People类 // // People.swift // Class // // Created by YouXianMing on 15/3/18. // Copyright (c) 2015年 YouXianMing. All rights reserved. // import Foundation class People { // 变量值 var name : String var age : Int // 初始化方法 init() { name = "YouX

李洪强iOS开发之创建一个对象并访问实例变量

// //  main.m //  07 - 创建一个对象并且访问实例变量 // //  Created by vic fan on 16/7/3. //  Copyright © 2016年 李洪强. All rights reserved. // // Car *car = [Car new]; 类名 *指针 = [类名 new]; [Car new];做了三件事: 1 向计算机申请内存空间 2 初始化类中的实例变量 3 返回对象的内存地址 #import <Foundation/Found

swift学习笔记:字符转为类,代码创建控件

在swift编程(http://www.maiziedu.com/course/ios/16-161/)中,我们都会遇到这样两个问题,如何把字符转为类和代码创建控件的方法,下面就具体讲解这两个知识点 在使用类之前要先获得 命名空间 通过json来获取 字符型的类名 然后创建类对象,这时候就要用到字符转类 // 从info字典中获取到 命名空间 转为字符型 let NS = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"

Swift编程中字符转为类,代码创建控件详解

在swift编程(http://www.maiziedu.com/course/ios/16-161/)中,我们都会遇到这样两个问题,如何把字符转为类和代码创建控件的方法,下面就具体讲解这两个知识点 在使用类之前要先获得 命名空间 通过json来获取 字符型的类名 然后创建类对象,这时候就要用到字符转类 // 从info字典中获取到 命名空间 转为字符型 let NS = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"

创建一个对象和i++是否原子性的理解

创建一个对象和i++是否原子性的理解 以下是个人猜测,希望大牛可以指正下,万分感谢.希望能让我从深坑拉我一把 一:创建对象是否原子性猜想 1:创建一个对象 2:JVM进行类加载,会把类的所有信息存放到方法区. 3:JVM进行内存分配和初始化,如果发现内存无法分配,那么会出现内存溢出异常. 当出现内存溢出的时候,并不会将类加载的信息进行回滚.个人猜想不是原子性操作. 二:i++是否原子性猜想 1:创建Int i = 5 2:5存放到局部变量表 3:当执行i++的时候,从变量表获取值,执行i++,

Java多线程01(Thread类、线程创建、线程池)

Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 1.1.2 单线程程序 - 从入口m

创建一个对象都在内存中做了什么事情

创建一个对象都在内存中做了什么事情? 1:先将硬盘上指定位置的Person.class文件加载进内存. 2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p. 3:在堆内存中开辟一个实体空间,分配了一个内存首地址值.new 4:在该实体空间中进行属性的空间分配,并进行了默认初始化. 5:对空间中的属性进行显示初始化. 6:进行实体的构造代码块初始化. 7:调用该实体对应的构造函数,进行构造函数初始化.() 8:将首地址赋值给p ,p变