-
类只能在栈上创建
因为在堆上创建对象需要调用new,所以将operator new设置为私有的即可
//如何设计类只能建立在栈 class Test { public: Test() { std::cout << "call construct function\n"; } ~Test() { std::cout << "call destruction function\n"; } void print_log() { std::cout << "call print log\n"; } /**/ //new 运算符是private,外部禁止调用 因此该类只能在栈上创建 //重载了new运算符也需要重载delete运算符 private: void* operator new(std::size_t count){} void* operator new[](std::size_t count){} void operator delete[]( void* ptr ){} void operator delete( void* ptr ){} }; /*类的使用*/ //无法访问 operate new或者new[]运算符 //build error Test* parrStack = new Test[10]; //build error Test* pStack = new Test; //build ok Test stack; stack.print_log();
-
类只能在堆上创建
1、将构造函数和析构函数设置成private属性
2、创建public属性的两个函数分别new和delete两个函数,并且是static,因为需要通过类调用,不能直接使用private属性的·构造函数/* 想要达到只能在堆上创建对象,其设计要求如下: 1.该类的构造函数或者析构函数至少有一个是private属性 2.提供一个创建对象接口,用于类内部创建堆对象 3.提供堆对象销毁函数,这个非必须,需要看析构是否public属性 */ class Test { private: Test():m_data(0){} ~Test(){} public: static Test* CreateObj() { return new (std::nothrow) Test; } static void DestroyObj(Test* &pInstance) { if (NULL != pInstance) { delete pInstance; pInstance = NULL; } } int m_data; }; //类的使用 Test OnlyHeap;//build error Test* pOnlyHeap = Test::CreateObj(); if (NULL != pOnlyHeap) { pOnlyHeap->m_data = 10; } //需要手动释放对象,否则内存泄漏,不易维护 if (NULL != pOnlyHeap) { Test::DestroyObj(pOnlyHeap); }
-
创建不能被继承的类
将构造函数私有化
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交