要清楚,兩個不同的對象的地址也是不同的?;谕瑯拥睦碛桑琻ew總是返回指向不同對象的指針。
看看:
class Empty { };
void f()
{
Empty a, b;
if (&a == &b) cout << "impossible: report error to compiler supplier";
Empty* p1 = new Empty;
Empty* p2 = new Empty;
if (p1 == p2) cout << "impossible: report error to compiler supplier";
}
有一條有趣的規(guī)則:一個空的基類并不一定有分隔字節(jié)。
struct X : Empty {
int a;
// ...
};
void f(X* p)
{
void* p1 = p;
void* p2 = &p->a;
if (p1 == p2) cout << "nice: good optimizer";
}
這種優(yōu)化是允許的,可以被廣泛使用。它允許程序員使用空類以表現(xiàn)一些簡單的概念?,F(xiàn)在有些編譯器提供這種“空基類優(yōu)化”(empty base class optimization)。
看看:
class Empty { };
void f()
{
Empty a, b;
if (&a == &b) cout << "impossible: report error to compiler supplier";
Empty* p1 = new Empty;
Empty* p2 = new Empty;
if (p1 == p2) cout << "impossible: report error to compiler supplier";
}
有一條有趣的規(guī)則:一個空的基類并不一定有分隔字節(jié)。
struct X : Empty {
int a;
// ...
};
void f(X* p)
{
void* p1 = p;
void* p2 = &p->a;
if (p1 == p2) cout << "nice: good optimizer";
}
這種優(yōu)化是允許的,可以被廣泛使用。它允許程序員使用空類以表現(xiàn)一些簡單的概念?,F(xiàn)在有些編譯器提供這種“空基類優(yōu)化”(empty base class optimization)。

