码迷,mamicode.com
首页 > 编程语言 > 详细

C++动态内存常见面试题解析

时间:2019-10-25 13:16:28      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:功能   类型   内存管理   new   amp   傻傻   区别   定位   静态   

           malloc/free和new/delete傻傻分不清?动态内存管理的面试题难道你了?来看这篇文章,包你全会。

    1.malloc/free和new/delete的区别

        (1)malloc/free是函数, new/delete是操作符;

        (2)malloc/free不会调用构造/析构函数,new/delete会调用构造/析构函数;

        (3)malloc申请的空间不能初始化,new申请的空间可以初始化;

        (4)malloc返回的void*需要强转,new后跟的是空间类型,不需要;

        (5)malloc失败返回NULL,使用时需要判空,new失败直接抛异常;

        (6)malloc申请的空间大小需要自己计算,new申请的空间大小,后面跟上空间类型就行;

        (7)new/delete效率比malloc/free稍微低点,因为new/delete的底层封装了malloc/free。

 

    2.请设计一个类,该类只能在堆上创建对象

           将类的构造函数,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,该静态成员函数完成堆对象的创建

class HeapOnly{
  public:
    static HeapOnly* CreateObject()
    {
      return new HeapOnly;
    }

  private:
    HeapOnly(){}
    //C++98
    //1.只声明,不实现。因为实现可能会很麻烦,而你本身不需要   
     //2.声明成私有
     HeapOnly(const HeapOnly&);
        
    // or            
    // C++11        
    HeapOnly(const HeapOnly&) = delete;
};

 

    3.请设计一个类,该类只能在栈上创建对象

      只能在栈上创建对象,即不能在堆上创建,因此只要将new的功能屏蔽掉即可,即屏蔽掉operator new和定位new表达式,注意:屏蔽了operator new,实际也将定位new屏蔽掉   

class StackOnly{
       public:
            StackOnly(){}

       private:
            void* operator new(size_t size);
            void* operator delete(void* p);
};    

 

C++动态内存常见面试题解析

标签:功能   类型   内存管理   new   amp   傻傻   区别   定位   静态   

原文地址:https://www.cnblogs.com/Duikerdd/p/11731577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!