C++初始化中的*


The * in C++ Initialisations

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
The Definitive C++ Book Guide and List

我是C++新手,一直在玩几个例子,我只是想知道当初始化一个类时,它意味着什么。

通常在AS3中,我会这样做:

1
MyClass myClass = new MyClass

但是我在C++中看到了这个

1
 MyClass *myClass = new MyClass

星星是用来干什么的,我见过它有时用,而不是其他的。

谢谢!


C++中的星号取决于它在程序中的位置。在这种特定情况下,它将myClass的含义修改为指向myClass实例的指针,而不是指向myClass实例的指针。

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

这样的声明是有效的:

1
MyClass myClass; // no"new"

在这种情况下,不需要使用new,但实例的生命周期与变量myClass的范围有关。


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

auto myClass = std::make_shared();

如果您使用的是一个"原始"指针,那么当您使用完内存后,您需要手动删除它,使用shared_ptr,这是不必要的。


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

new创建一个对象,您将负责它的生命周期。当您不再需要它们时,您将需要删除它,而创建MyClass myClass;将在退出创建它的作用域时被破坏。即使这样写,您仍然可以使用&操作符访问myclass内存地址。

如果你需要更多的解释,试着找一本那些书。