I know what implict sharing means.But I'm not sure wether I'm using it in a right way.And I read the Implicit Sharing part in the Qt document.I know only some classes is implicit sharing.

Here are some methods declaration:
---------------------------------------------------------------------------------
Group1:
1. void parseOptions(QMap<QString, QString> options);
2. void parseOptions(QMap<QString, QString> &options);
3. void parseOptions(QMap<QString, QString*> options);

Group2:
4. void parseOptions(QMap<QString, QWidget> options);
5. void parseOptions(QMap<QString, QWidget*> options);
6. void parseOptions(QMap<QString, QWidget> &options);
7. void parseOptions(QMap<QString, QWidget*> &options);

----------------------------------------------------------------------------------

Question1:When I pass Container to a function,are pass-by-value and pass-by-reference the same?(1st & 2nd declaration)
Question2:When I create a container object.Should I store values or pointers.(2nd & 3rd).
Question3:Which one should I choose from Group2?