6

可能重复:
权威 C++ 书籍指南和列表

初始化类时*是什么意思?通常在 AS3 中我会这样做:

MyClass myClass = new MyClass

但我在 c++ 中看到过这个

 MyClass *myClass = new MyClass

星星有什么用?我见过它有时使用而不是其他。

4

3 回答 3

5

C++ 中的星号有很多含义,具体取决于它在程序中的位置。在这个特定的实例中,它将 的含义修改为指向的实例的myClass指针MyClass而不是 的实例MyClass

两者的区别在于,实例的生命周期在超出范围时结束,而您通过指针分配和引用的实例即使在指针超出范围后仍然有效。

有这样的声明是有效的:

MyClass myClass; // no "new"

在这种情况下,没有必要使用new,但实例的生命周期与变量的范围相关联myClass

于 2012-10-16T13:09:31.697 回答
2

星号代表pointer. 指针是一个内存地址。当您编写 时MyClass *myClass,您会创建一个指向创建新 MyClass 的位范围开头的指针。

用 来创建一个对象new,你就要对它的生命周期负责。当您不再需要它们时,您将需要将其删除,而MyClass myClass;在退出创建它的范围时,创建将被销毁。即使以这种方式编写,您仍然可以使用&运算符访问 myClass 内存地址。

如果您需要更多解释,请尝试获取其中一本书

于 2012-10-16T13:08:50.513 回答
2

它被称为指针。如果您使用的是与 C++11 兼容的编译器,则可以执行以下操作:

auto myClass = std::make_shared<MyClass>();

如果您使用的是“原始”指针,则需要在使用完内存后手动删除它,使用shared_ptr,这不是必需的。

于 2012-10-16T13:09:12.427 回答