0

在我所有的课程中,教授们都强调使用这种技术来创建一个项目和一个用于传递它的指针:

更新只是打字时出错。太习惯java了。

Item item;
Item* pItem = &item;

现在,您可以使用 pItem 安全地传递项目,而无需在内存中复制项目。但是,如果我只做以下事情怎么办:

Item* item = new Item;

然后我有一个指针,我可以在 main 或你有什么中取消引用,还有一个我可以简单地传递并作为变量并确信它不会被重复的点。

创建新对象时创建指针有问题吗?

另外,在使用 Java 一段时间后,我将回到 C++ 与 ALLEGRO5 一起度过我的夏天,所以有人可以清楚地解释在 CPP 中创建新对象的不同方法,以及每种方法的实际作用吗?

做:

Item item;

实际上创建了一个新的 Item 对象,或者像 Java 一样它只是一个空引用?

4

3 回答 3

4

Uhh, this does not work because new Item returns an Item*:

Item item = new Item;

And this is standard practice practice for a heap-allocated (i.e. released by delete) object:

Item* item = new Item;

I think your professor actually said:

Item item;
Item* pItem = &item;

Which is standard practice for a stack-allocated (i.e. released by leaving its scope) object.

于 2013-05-01T04:52:28.707 回答
3

创建新对象时创建指针有问题吗?

没有任何错误。但是你应该考虑以下几点:

  • 你真的需要一个动态分配的对象吗?
  • 所有权语义怎么样,也许智能指针可以比原始指针更好地为您服务。

Item item;

创建一个新对象。这个对象的生命周期取决于它被创建的范围,
如果这个对象是全局创建的,它会在程序的整个生命周期中存在。
如果它是在本地创建的,则它位于创建它的范围内{ }

于 2013-05-01T04:50:24.630 回答
1

如果您正在寻找一种在不复制其内存的情况下传递项目的方法(或者在复制构造函数中做更重的事情),那么您可能会考虑引用而不是原始指针。

引用不具有指针的所有灵活性(即它们在创建后不能变为 NULL 或指向不同的对象),但它们在对象所有权和生命周期方面更清晰(拥有您永远不会拥有也不会负责释放对象的引用; 对临时的 const 引用可能会获得所有权,但仅此而已)。

您可以考虑使用智能指针而不是原始指针,但与引用不同,它们会带来额外的成本。

于 2013-05-05T06:55:37.163 回答