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;
    }
  • 相关阅读:
    借用构造函数实现继承
    原型链
    创建对象 之 组合使用构造函数模式和原型模式
    6.原型对象的问题
    Spring MVC
    AOP
    谈谈对Spring IOC的理解
    Mybatis3.x与Spring4.x整合(转)
    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
    Appweb写法
  • 原文地址:https://www.cnblogs.com/crbhf/p/15004567.html
Copyright © 2011-2022 走看看