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;
    }
  • 相关阅读:
    环保
    A股行情记录
    航运
    黑五类
    家电
    妖股
    高校概念股
    科技园区
    壳股
    白底黑字or黑底白字,眼睛更喜欢哪一个?
  • 原文地址:https://www.cnblogs.com/crbhf/p/15004567.html
Copyright © 2011-2022 走看看