下面两种创建对象的方法有什么区别?
Test* t = new Test();
和
Test* t;
您对第二个示例的回答与我的预期相符(没有创建对象)但是
class Test {
public:
void bla(void) {
std::cout << "test" << std::endl;
};
};
int main(void) {
Test* test;
test->bla();
}
给我输出“test”...所以实际上有一个对象
最佳答案
第一个做了 4 件事:
- 创建指向
Test
的指针> - 分配内存并创建
Test
对象(注意,它是Test
,而不是test
) - 由于
()
,新对象的值已初始化 - 参见 Do the parentheses after the type name make a difference with new?了解更多信息 - 初始化指向创建对象的指针
第二个只是创建指向 Test
的指针。而且它还没有初始化。
@yogi - 对于您的编辑 - 这完全是未定义的行为,因为指针未初始化。不,它不是一个对象。参见 C++ function called without object initialization获取更多信息。
关于c++ - 对象创建差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278139/