zoukankan      html  css  js  c++  java
  • [面试] 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配 (Very Good! tx)

    当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。

    如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。

    如果在堆上分配空间,只有在delete时才会调用析构函数。

    可以添加一个destroy()函数来释放,从而解决不能在析构函数中添加delete的问题。

    /**
    //HeapOnly.cpp
    #include <iostream>
    using namespace std;
    class HeapOnly {
    public :
        HeapOnly() {
            cout << "Structor." << endl;
        }
        void destroy() const {
            cout << "destructor" << endl;
            delete   this;
        }
    private :
        ~HeapOnly() {}
    };
    int main() {
      HeapOnly *p = new HeapOnly;
      p->destroy();
      // HeapOnly h;
      // h.Output();
      return   0;
    }
    **/
    //StackOnly.cpp
    #include <iostream>
    using namespace std;
    class StackOnly {
    public :
        StackOnly() {
            cout << "constructor." << endl;
        }
        ~StackOnly() {
            cout << "destructor." << endl;
        }
    private :
        static void* operator new(size_t);
    };
    int main() {
        StackOnly s;  ///okay
        //StackOnly *p = new StackOnly; ///wrong
        return 0;
    }
    

  • 相关阅读:
    maven配置
    redis测试
    智慧社区技术总结
    视频导航
    Delphi 任务栏中不显示窗口
    Delphi 设置程序图标为系统默认图标
    清除Windows系统图标缓存
    C/C++ 变量的本质分析
    005 C/C++ 数据类型_void
    004 C/C++ 数据类型_类型别名
  • 原文地址:https://www.cnblogs.com/robbychan/p/3787014.html
Copyright © 2011-2022 走看看