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;
    }
  • 相关阅读:
    本地存储 localStorage
    正则对象
    面向对象
    事件
    日期对象
    网易适配与淘宝适配
    自动把网页px单位转换成rem
    湖南省web应用软件(中慧杯)
    百度图片审核功能
    百度ai语音识别
  • 原文地址:https://www.cnblogs.com/crbhf/p/15004567.html
Copyright © 2011-2022 走看看