以下两种创建对象的方法有什么区别?

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的指针
分配内存并创建Test对象(请注意,它是Test,而不是test
由于(),因此对新对象进行了值初始化-有关更多信息,请参见Do the parentheses after the type name make a difference with new?
初始化指针以指向创建的对象


第二个只是创建指向Test的指针。并且它没有初始化。



@yogi-供您编辑-完全未定义行为,因为指针未初始化。不,这不是一个对象。有关更多信息,请参见C++ function called without object initialization

10-04 23:32
查看更多