C++ Can C++;指针应该首先创建,而不是创建一个变量,然后为它创建指针?

C++ Can C++;指针应该首先创建,而不是创建一个变量,然后为它创建指针?,c++,object,C++,Object,在我所有的课程中,教授们都强调使用这种技术来创建一个项目和一个指针,以便传递: 更新了只是键入时出错。太习惯java了 Item item; Item* pItem = &item; 现在,您可以使用pItem安全地传递项,而无需在内存中复制项。但是,如果我只是做以下几件事呢: Item* item = new Item; 然后,我有一个指针,我可以在main中或其他地方取消引用,还有一个点,我可以简单地作为变量传递,并确信它不会被复制 在创建新对象时创建指针是否有问题 我也会在ja

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

更新了只是键入时出错。太习惯java了

Item item;
Item* pItem = &item;
现在,您可以使用pItem安全地传递项,而无需在内存中复制项。但是,如果我只是做以下几件事呢:

Item* item = new Item;
然后,我有一个指针,我可以在main中或其他地方取消引用,还有一个点,我可以简单地作为变量传递,并确信它不会被复制

在创建新对象时创建指针是否有问题

我也会在java之后用C++来访问我的AcLRo5,所以有人能清楚地解释在CPP中创建新对象的不同方式,以及每个方法实际做什么?

是否:

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

在创建新对象时创建指针是否有问题?

没有什么不对的。但是你应该考虑如下:

  • 您真的需要一个动态分配的对象来开始吗
  • 所有权语义如何,也许智能指针比原始指针更好地为您服务

创建一个新对象。该对象的生存期取决于创建它的范围,
如果此对象是全局创建的,则它将在程序的整个生命周期内存在。

如果它是本地创建的,则它位于创建它的范围内。

Uhh,这不起作用,因为
新项
返回一个
项*

Item item = new Item;
这是堆分配(即由
delete
发布)对象的标准实践:

我想你的教授实际上说过:

Item item;
Item* pItem = &item;

这是对一个堆栈分配的标准实践(即,通过释放它的作用域释放)对象。

如果你正在寻找一个方法来传递一个项目而不复制它的内存(或者在拷贝构造函数中做更重的事情),那么你可以考虑引用而不是原始指针。 这些引用没有指针的所有灵活性(即,它们在创建后不能变为NULL或指向不同的对象),但它们在对象所有权和生命周期方面要干净得多(拥有reference,您将永远不会拥有,也不会负责释放对象;拥有const reference,您可能会获得所有权,但仅此而已)


代替原始指针,你可以考虑智能指针,但是它们引入了额外的成本,与引用不同。

在你的方式中没有错误。事实上第一段代码是相当无用的。你的问题中的第一行代码<代码>项目项=新项;< /C> >无效。这使得很难回答你的问题,因为T您显示的wo代码段可能有不同的行为,具体取决于第一个代码段的更正方式。您在问题标题中问了一件事,在问题正文中问了另一件事。此外,您应该澄清您的真正意思是
Item Item=new Item;
。这在一般情况下不起作用。“在我的所有课程中,教授们都强调使用这种技术来创建一个项目,并为其传递一个指针:“我非常怀疑任何C++教授都说过这个。尤其是,除非项目< /Cord>是一个非常奇怪的对象,否则它不会编译。java教授可能会说,但是他们将要教java,而不是C++。
Item item = new Item;
Item* item = new Item;
Item item;
Item* pItem = &item;