C ++ Initialisations中的*

时间:2012-10-16 13:06:53

标签: c++

  

可能重复:
  The Definitive C++ Book Guide and List

我是C ++的新手并且只是用几个例子来玩,我只是想知道在初始化一个类时*意味着什么。

通常在AS3中我会这样做:

MyClass myClass = new MyClass

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

 MyClass *myClass = new MyClass

明星是什么,我曾经看过它有时使用而不是其他人。

谢谢!

3 个答案:

答案 0 :(得分:4)

C ++中的星号意味着很多东西取决于它在程序中的位置。在此特定实例中,它将myClass的含义修改为指针MyClass的实例,而不是MyClass的实例。

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

这样的声明是有效的:

MyClass myClass; // no "new"

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

答案 1 :(得分:1)

星号表示pointer。指针是一个记忆地址。当您编写MyClass *myClass时,您将创建一个指向创建新MyClass的位范围开头的指针。

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

如果您需要更多解释,请尝试获取those books之一。

答案 2 :(得分:1)

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

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

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