当我们在c ++中对类使用malloc/free时,不会创建对象.那为什么这段代码有效呢?如果未创建对象,则它不得提供下面提到的输出.
class Test
{
public:
Test()
{
cout << "Test : ctor\r\n";
}
~Test()
{
cout << "Test : dtor\r\n";
}
void Hello()
{
cout << "Test : Hello World\r\n";
}
};
int main()
{
cout << "2\n";
Test* t2 = (Test*) malloc(sizeof Test);
t2->Hello();
free(t2);
return 0;
}
OUTPUT:
Hello World
Run Code Online (Sandbox Code Playgroud)
未定义的行为是简短的答案.答案很长,因为你的类没有直接调用它们的虚方法只是一个带有隐含this参数的函数调用,该参数指向你已经分配的内存.也就是说如果你的任何方法访问this它会导致更多未定义的行为,因为该对象尚未构造.
Columbo和LRIO公然偷走了:
[C++11: 3.8/1]:对象的生命周期是对象的运行时属性.如果一个对象属于类或聚合类型,并且它或其成员之一由除了普通默认构造函数之外的构造函数初始化,则称该对象具有非平凡的初始化.[注意:通过简单的复制/移动构造函数进行初始化是非平凡的初始化. - 尾注]
临界位存在它的指针对象可以包含不仅仅是其中部件被存储在一个地方的其他数据.由实现来决定它是什么.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |