[面试] 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配 (Very Good! tx)
2013-03-08 16:58
357 查看
当我们规定类只能在堆上分配内存时,就可以将析构函数声明为私有的。
如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。
如果在堆上分配空间,只有在delete时才会调用析构函数。
可以添加一个destroy()函数来释放,从而解决不能在析构函数中添加delete的问题。
如果在栈上分配空间,类在离开作用域时会调用析构函数释放空间,此时无法调用私有的析构函数。
如果在堆上分配空间,只有在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; }
相关文章推荐
- [面试] 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配 (Very Good! tx)
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配。
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配(腾讯2012面试题)
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配
- 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配
- 一个只能在栈中分配空间和一个只能在堆中分配的类
- C++:编写一个程序,用动态分布分配空间的方法计算Fibonacci数列的前二十项并存储到动态分布的空间中
- 【转】C++怎么设计只能在堆或者栈分配空间的类以及定义一个不能被继承的类
- 剑指offer2.3.2字符串:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2,编写一个函数,将A2合并到A1并排序
- 三个进程共享四个同类资源,这些资源的分配与释放只能一次一个。已知每一个进程最多需要两个资源,试问,该系统会发生死锁吗?为什么?
- 习题 1.5 请参照本章例题,编写一个C程序,输出以下信息:*****Very good!*****
- 习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- C/C++面试常考题目讨论之二:如何通过函数来分配空间
- 请编写实现malloc()内存分配函数功能一样的代码。给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。
- 翻转子串 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。
- 两个指针指向同一个由malloc分配的空间,free掉一个问题
- 【C++】用C编写一个my2DAlloc函数,可以分配二维数组。
- 假设一个网站系统存在两个配置文件web.config和config.config,那么我如何读取config.config的配置节呢?System.Configuration名字空间下的接口好象只能读
- C++中对已分配空间的指针调用一个类的构造函数