个性化阅读
专注于IT技术分析

如何限制C++中对象的动态分配?

C++编程语言允许自动(或栈分配)和动态分配的对象。在Java和C#中, 必须使用new动态分配所有对象。

出于运行时效率的考虑, C++支持栈分配的对象。基于栈的对象由C++编译器隐式管理。它们超出范围时将销毁它们, 并且必须使用delete运算符手动释放动态分配的对象, 否则会发生内存泄漏。 C++不支持Java和C#等语言使用的自动垃圾收集方法。

我们如何通过C++中的”测试”类实现以下行为?

Test* t = new Test; //should produce compile time error
Test t;    //OK

的想法是使新的运算符函数保持私有状态, 以便不能调用new。请参阅以下程序。无法使用new创建”测试”类的对象, 因为新的运算符功能在”测试”中是私有的。如果取消注释main()的第二行, 程序将产生编译时错误。

#include <iostream>
using namespace std;
  
//Objects of Test can not be dynamically allocated
class Test
{
     //Notice this, new operator function is private
     void * operator new ( size_t size);
     int x;
public :
     Test()          { x = 9; cout <<"Constructor is called\n" ; }
     void display()  { cout <<"x = " <<x <<"\n" ;  }
     ~Test()         { cout <<"Destructor is executed\n" ; }
};
  
int main()
{
     //Uncommenting following line would cause a compile time error.
     //Test* obj=new Test();
     Test t;          //Ok, object is allocated at compile time
     t.display();
     return 0;
} //object goes out of scope, destructor will be called

输出如下:

Constructor is called
x = 9
Destructor is executed

参考:

C++ Bjarne Stroustrup的设计与演变

本文作者:普拉瓦西见面。如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

赞(0)
未经允许不得转载:srcmini » 如何限制C++中对象的动态分配?

评论 抢沙发

评论前必须登录!