f******n 发帖数: 90 | 1 Then when does a private dctor make a difference?
If it's private, we would do sth like: pObj->destory().
If it's public, we would need to do: delete pObj;
help! I still don't get why dctor need to be private for singleton pattern.
thr
exp |
|
h****b 发帖数: 157 | 2 好像这样是可以的,google 到的
class OnlyStack
{
public:
OnlyStack(){}
private:
void* operator new(size_t size);
void operator delete(void*ptr);
//
}
int main( int argc, char* argv[] )
{
OnlyStack obj; // OK
//OnlyStack *pobj = new OnlyStack;// Error
} |
|
a********m 发帖数: 15480 | 3 简单说几句。板上大牛多,俺板门弄斧下,再说大牛们估计也觉得说这个太简单了。如
果有错误请指出。谢先。另外俺用c/c++的前几年也不是很理解很多细节,只管记语法
,或者有些理解错误,所以刚开始用c++的童鞋不清楚这个的话也是正常的。
首先要知道c++对象和structure除了缺省private以外没有区别。都是一堆成员变量组
成一个内存块。
但是如果类有一个虚函数以后每个对象会在开头多一个指针变量。现在的机器和编译器
一般来说是4个字节。这个指针指向这个类的虚函数表,而且所有的同类对象的指针都
指向同一个表。虚函数调用是先去这个表查询一下(编译器会分配一个下标),调用函
数实际类似 _vtable[下标](.....),其中_vtable 相当于(*(void*)pobj).
编译器编译虚函数的时候不是生成函数跳转,而是生成一个下标。对于同一个函数,基
类和子类有不同的虚函数表,但是有相同的函数下标。所以做_vtable[下标]动作的时
候虚函数就是子类的的实际函数了,只要指针本身是正确的(指向子类或者基类,而不
是强制转成乱七八糟的指针)。总的来说编译器负责产生下标,而对象负责提供一... 阅读全帖 |
|
a********m 发帖数: 15480 | 4 简单说几句。板上大牛多,俺板门弄斧下,再说大牛们估计也觉得说这个太简单了。如
果有错误请指出。谢先。另外俺用c/c++的前几年也不是很理解很多细节,只管记语法
,或者有些理解错误,所以刚开始用c++的童鞋不清楚这个的话也是正常的。
首先要知道c++对象和structure除了缺省private以外没有区别。都是一堆成员变量组
成一个内存块。
但是如果类有一个虚函数以后每个对象会在开头多一个指针变量。现在的机器和编译器
一般来说是4个字节。这个指针指向这个类的虚函数表,而且所有的同类对象的指针都
指向同一个表。虚函数调用是先去这个表查询一下(编译器会分配一个下标),调用函
数实际类似 _vtable[下标](.....),其中_vtable 相当于(*(void*)pobj).
编译器编译虚函数的时候不是生成函数跳转,而是生成一个下标。对于同一个函数,基
类和子类有不同的虚函数表,但是有相同的函数下标。所以做_vtable[下标]动作的时
候虚函数就是子类的的实际函数了,只要指针本身是正确的(指向子类或者基类,而不
是强制转成乱七八糟的指针)。总的来说编译器负责产生下标,而对象负责提供一... 阅读全帖 |
|
i******r 发帖数: 323 | 5 如果事先知道buffer的最大容量,自己用一个一维数组实现?
比如知道最多100个东西在buffer里
Type* buffer[101];
int front = 0;
int back = 0;
要插入就buffer[back] = &obj; back=(back+1)%101;
要pop out(?)就pObj = buffer[front]; front=(front+1)%101;
如果front==back就是empty buffer |
|