zoukankan      html  css  js  c++  java
  • 107、类如何实现只能静态分配和只能动态分配

    1) 前者是把new、delete运算符重载为private属性。后者是把构造、析构函数设为protected属性,再用子类来动态创建

    2) 建立类的对象有两种方式:

    ① 静态建立,静态建立一个类对象,就是由编译器为对象在栈空间中分配内存;

    ② 动态建立,A *p = new A();动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内 存。这个过程分为两步,第一步执行operator new()函数,在堆中搜索一块内存并进行分配;第二步调 用类构造函数构造对象;

    3) 只有使用new运算符,对象才会被建立在堆上,因此只要限制new运算符就可以实现类对象只能建立 在栈上,可以将new运算符设为私有。

    #include <iostream>
    using namespace std;
    //只能动态分配
    class A
    {
    protected:
    A(){}
    ~A(){}
    public:
    static A* create(){return new A();}
    void destory(){delete this;}
    };

    //只能静态分配
    class B
    {
    private:
    void* operator new(size_t t){} //注意函数的第一个参数和返回值都是固定的
    void operator delete(void* ptr){} //重载了new就需要重载delete
    public:
    B(){}
    ~B(){}
    };

    int main()
    {
    A* a = A::create();
    B b;
    return 0;
    }
  • 相关阅读:
    蛇形矩阵
    润年还是平年
    汽水瓶
    魔幻矩阵
    魔方矩阵
    时间字段替换
    Windows Server 2012 R2蓝屏
    查询速度慢的原因很多(转载)
    索引和锁
    别不拿里程碑当石头---------IT项目管理之项目计划(转)
  • 原文地址:https://www.cnblogs.com/crbhf/p/15004567.html
Copyright © 2011-2022 走看看