zoukankan      html  css  js  c++  java
  • C++如何限制对象在堆上或栈上生成

    1,限制类的对象只能生成在栈上

    将 operator new 各种原型设为私有

    
    #include <iostream>
     
    class OnlyOnStack {
    public:
        OnlyOnStack() {
            std::cout << "ctor!" << std::endl;   
        }
        ~OnlyOnStack() {
            std::cout << "dctor!" << std::endl;   
        }
    private:
        void* operator new (std::size_t size);
        void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;
        void* operator new (std::size_t size, void* ptr) noexcept;
        void* operator new[](std::size_t size);
        void* operator new[] (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;
        void* operator new[] (std::size_t size, void* ptr) noexcept;
    };
     
    int main() {
        OnlyOnStack stack;
     
        // OnlyOnStack *ps = new OnlyOnStack;
    }

    2,限制类的对象只能生成在堆上,有两种方法

    2.1 使用单例模式:构造函数私有,getInstance()中获取单例时new 出来一个

    2.2 析构函数私有,这样编译器就会自动阻止你定义栈上对象,析构函数私有了就需要类提供一个public的销毁函数给外部用

  • 相关阅读:
    MySql
    Zookeeper
    Kafka
    Mybatis
    Spring/Spring MVC
    Spring Boot/Spring Cloud
    网络
    设计模式
    Strassen algorithm(O(n^lg7))
    dynamic programming:find max subarray
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/12003511.html
Copyright © 2011-2022 走看看