简体   繁体   中英

Using raw pointers without allocating memory

I would like to ask about my approach to using pointers raw pointers without allocating any memory using pointers. I am working on an application, that is simulating classical cashdesk. So I have a class CashDesk, which is containing vectors of Items and vector of Orders, which are classes to represent items and orders. Furthermore, I want the Order class to contain a vector, which would be a vector of pointers to Item – I don't want to store the object multiple times in different orders, because it makes no sense to me. Through the pointers in Order, I only want to be able to access properties of the class Item, there is no allocating of memory using the pointers.

Simplified code:

class CashDesk {
 vector<Item> items;
 vector<Order> orders;
}
class Order {
 vector<Item*> ItemsInOrder;
}

Class Item containing only structured data – information about the Item.

I create all objects at the level of the CashDesk class – create instance of Item when needed and push it to items vector.

I have been told that I should avoid using raw pointers unless there is no another option. The important thing is that I don't use any memory allocation using pointers – really using the pointer in terms of pointing at the object and accessing it's properties. Should I rather use something like unique_ptr, or completely different approach?

Thanks for any response.

I have been told that I should avoid using raw pointers unless there is no another option.

You have been told something subtly wrong. You should avoid owning raw pointers, but non-owning raw pointers are perfectly fine.

You will have to ensure that the elements of Order::itemsInOrder aren't invalidated by operations on CashDesk::items , but that co-ordination should be within the private parts of CashDesk .

You could be more explicit about the lack of ownership semantic, by using std::vector<Item>::iterator in place of Item * , but that doesn't change any behaviour (a conforming implementation may implement std::vector<Item>::iterator as an alias of Item * )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM