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