可能重复:
权威 C++ 书籍指南和列表
初始化类时*是什么意思?通常在 AS3 中我会这样做:
MyClass myClass = new MyClass
但我在 c++ 中看到过这个
MyClass *myClass = new MyClass
星星有什么用?我见过它有时使用而不是其他。
可能重复:
权威 C++ 书籍指南和列表
初始化类时*是什么意思?通常在 AS3 中我会这样做:
MyClass myClass = new MyClass
但我在 c++ 中看到过这个
MyClass *myClass = new MyClass
星星有什么用?我见过它有时使用而不是其他。
C++ 中的星号有很多含义,具体取决于它在程序中的位置。在这个特定的实例中,它将 的含义修改为指向的实例的myClass
指针,MyClass
而不是 的实例MyClass
。
两者的区别在于,实例的生命周期在超出范围时结束,而您通过指针分配和引用的实例即使在指针超出范围后仍然有效。
有这样的声明是有效的:
MyClass myClass; // no "new"
在这种情况下,没有必要使用new
,但实例的生命周期与变量的范围相关联myClass
。
星号代表pointer
. 指针是一个内存地址。当您编写 时MyClass *myClass
,您会创建一个指向创建新 MyClass 的位范围开头的指针。
用 来创建一个对象new
,你就要对它的生命周期负责。当您不再需要它们时,您将需要将其删除,而MyClass myClass;
在退出创建它的范围时,创建将被销毁。即使以这种方式编写,您仍然可以使用&
运算符访问 myClass 内存地址。
如果您需要更多解释,请尝试获取其中一本书。
它被称为指针。如果您使用的是与 C++11 兼容的编译器,则可以执行以下操作:
auto myClass = std::make_shared<MyClass>();
如果您使用的是“原始”指针,则需要在使用完内存后手动删除它,使用shared_ptr
,这不是必需的。