能力值:
( LV3,RANK:30 )
|
-
-
2 楼
LTT都说难了,我只能占位了……
|
能力值:
( LV9,RANK:250 )
|
-
-
3 楼
不知道楼主到底想实现什么功能.
不过有几个明显的错误:
PBYTE pnew = new BYTE[sizeof(*m_p) + 10];
如果想编译过,改成:
PBYTE pnew = new BYTE[sizeof(m_p) + 10];
模板展开以及这个sizeof是在编译期间.而用指针解引用却肯定要在运行期.这里肯定编不过.因为编译器不知道sizeof中的类型是什么.
::new( (void*)p ) *T;//这里编译出错。如何调用Class的构造函数?
同样的道理,你试图用指针指向的类型去构造,这也是错误的.要么这里改成T要么你做一个Wrapper重新传一个参数进来.
另外感觉你好像在自己实现new.分配类的内存,调用构造函数...
|
能力值:
( LV13,RANK:530 )
|
-
-
4 楼
|
能力值:
(RANK:1010 )
|
-
-
5 楼
这3个类的设计本身就存在问题。LZF对象空间的分配具有特殊,因而不应该在外部Auto1和Auto2中分配,应该在LZF内部重载运算符new来实现各种特殊的空间分配要求。这才是解决问题的根本方法。
对于当前问题,想不出来,应该属于无解吧。已知对象指针求对象类型,这个问题就相当于给你4个字节,让你求类型。没戏
如果非要这么做的话,考虑到代码这么实现是为了不产生临时对象,
稍微变通了下,实现同样效果:
增加LZF::xx()函数,把B中的"::new( (void*)p ) *T"修改为"p->xx();"
void LZF::xx()
{
::new((void*)this) LZF;
}
|
能力值:
(RANK:10 )
|
-
-
6 楼
lz 是想弄个自动管理内存的东西吧,第一种看起来就很舒服。
如果只是为了不产生临时对象,这样做好像更慢一点
按ls 的写法,涉及到的每个类都要增加一个xx 函数,这样的设计也不是很好,至于怎么从指针类型推导出原类型就不知道了
|
能力值:
( LV13,RANK:1050 )
|
-
-
7 楼
,同意北极星的观点
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
学习了 ..............
|
能力值:
(RANK:1010 )
|
-
-
9 楼
合理的方法应该就如我上面的第一个观点,在LZF中重载new
xx函数确实不好
另外LZ的设计中还有个目标就是空间分配的大小可调"sizeof(*m_p) + 10"
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
占位学习。。。。
|
能力值:
( LV12,RANK:240 )
|
-
-
11 楼
智能指针?
害死人了 自己想了一个小时 GOOLE了两三个小时 没进展
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
这个是自己出的,还是什么的竞赛题?
|
|
|