t*******y 发帖数: 637 | 1 Suppose you're responsible for writing class MyClass as part of a static
library.
a) How do you enforce that a single instance of this class be used at
compile-time? b) How do you enforce that instances only be allocated on the
stack, but not on the heap, at compile-time?
a)应该是用singleton
b)呢? |
l******e 发帖数: 12192 | 2 private operator 'new'
the
【在 t*******y 的大作中提到】 : Suppose you're responsible for writing class MyClass as part of a static : library. : a) How do you enforce that a single instance of this class be used at : compile-time? b) How do you enforce that instances only be allocated on the : stack, but not on the heap, at compile-time? : a)应该是用singleton : b)呢?
|
p********7 发帖数: 549 | 3 用new就在heap了,直接用构造函数吧
【在 l******e 的大作中提到】 : private operator 'new' : : the
|
a****n 发帖数: 1887 | 4 既然是private new, 你怎么调用new? 除非friend
所以一般做法就是private new
【在 p********7 的大作中提到】 : 用new就在heap了,直接用构造函数吧
|
l******e 发帖数: 12192 | 5 you didn't get it.
【在 p********7 的大作中提到】 : 用new就在heap了,直接用构造函数吧
|
p********7 发帖数: 549 | 6 I see.
you are right
【在 l******e 的大作中提到】 : you didn't get it.
|
h**6 发帖数: 4160 | 7 反过来,只允许分配在堆,而不允许在栈,方法是私有析构函数。
new之后不调用delete,调用一个自己写的函数销毁内存。 |
m*****n 发帖数: 2152 | 8 为什么new之后不调用delete?
【在 h**6 的大作中提到】 : 反过来,只允许分配在堆,而不允许在栈,方法是私有析构函数。 : new之后不调用delete,调用一个自己写的函数销毁内存。
|
M********5 发帖数: 715 | 9 you didn't get it either.
这位han6说得是,如果只能在heap上创建类,怎么做?
答案就是,将析构函数设成private,这样,如果你在stack上定义一个对象,在程序结
束的时候,系
统会自动调用析构函数。但是现在析构函数是private的,所以就会出错,也就是说,
系统无法销毁对
象。那么就不能在stack上创建对象,所以只能在heap上用new来创建对象。这样一来,
又有个问题,
就是对象分配的空间要释放啊?那怎么办呢,就在类里面定义一个接口函数(注意,
public的函数才能
叫作接口函数),在这个函数里面调用析构函数,然后在其他函数中调用这个接口函数
,就可以释放对
象。
这就是,在new之后不调用delete,而调用这个接口函数的意思。
you got it?
【在 m*****n 的大作中提到】 : 为什么new之后不调用delete?
|
c*******w 发帖数: 63 | 10 可以把constructor 定义成private的吗? 提供一个函数, GetInstance等,函数里面用
new来得到instance.
【在 h**6 的大作中提到】 : 反过来,只允许分配在堆,而不允许在栈,方法是私有析构函数。 : new之后不调用delete,调用一个自己写的函数销毁内存。
|