C++编程语言允许自动(或栈分配)和动态分配的对象。在Java和C#中, 必须使用new动态分配所有对象。
出于运行时效率的考虑, C++支持栈分配的对象。基于栈的对象由C++编译器隐式管理。它们超出范围时将销毁它们, 并且必须使用delete运算符手动释放动态分配的对象, 否则会发生内存泄漏。 C++不支持Java和C#等语言使用的自动垃圾收集方法。
【如何限制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的设计与演变
本文作者:普拉瓦西见面。如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- 如何从C中的函数返回指针()
- 如何删除内联块元素之间的空间()
- 如何在PHP中删除非字母数字字符()
- c++|C++八种排序算法万字详解
- mac上kubeadmin安装k8s(完整)
- redis 哨兵模式 sentinel
- powershell 向内部证书颁发机构申请证书
- k8s-apiServer认证
- 回首图扑软件 2021,展望未来