类型转换,static_cast还是reinterpret_cast?
类型转换,static_cast还是reinterpret_cast?
class A
{
private:
int i;
};
现在要有
A* next;
next = static_cast <A*> (new char[sizeof (A*)]);//这样不行
next = reinterpret_cast <A*> (new char[sizeof (A*)]);//这样可以,好吗
[解决办法]
-_-!
[解决办法]
A* next = new A*;
[解决办法]
贴两段代码, test1.cpp 是首选. test2.cpp 也可以工作, 但没 1 好. 详细可以参考 < < C++ Code Standards > >
// test1.cpp
// vc-7_1 + xp
// cl -EHsc test1.cpp
class A {
private:
int i;
};
int main() {
char * chrs = new char[sizeof A];
void * p = chrs;
A * next = static_cast <A *> (p);
return 0;
}
-----------------------
// test2.cpp
// vc-7_1 + xp
// cl -EHsc test2.cpp
class A {
private:
int i;
};
int main() {
A * next = reinterpret_cast <A *> (new char[sizeof A]);
return 0;
}
[解决办法]
HOHO, 人在啊!
我还有个问题要问题. 你为什么要sizeof A*啊?
[解决办法]
那不是要引入一个C风格的转换? 不够爽!
[解决办法]
两个不同类的? 我没仔细想好, 直觉上有危险. 让我好好想想.
[解决办法]
Learning...
[解决办法]
恩. void *应该算明确的自然转换, 想来不会有大问题. 但你两个不同类, 有点悬啊!
[解决办法]
晕死,去重载operator new。
[解决办法]
另外请确认你了解内存对齐的基本知识。