【发布时间】:2015-11-26 15:39:07
【问题描述】:
我正在创建一个字符串解析器类,并且有很多子子私有成员函数都需要访问输入。我想避免将输入作为每个函数的参数,例如
string out = func(input){ sub_func(input) { sub_sub_func(input) } } }
我一直听说原始指针很糟糕,但是对于“仅使用指针来引用某物”这种特定情况仍然没有得到明确的答案。我可以的
string m_str //declared as private member
func(string& input) { m_str = move(input) } //member function
或
string& m_str; //declared as a private member
myclass (string input) : m_str(input); //class construction
但我想做的是
string m_str* //declared as a private member
func(string input) { m_str = input } //member function
问题
- 是否需要在 myclass 对象超出范围之前将 m_str 设置为 nullptr(即将其放入类析构函数中)?
- 我应该使用唯一指针而不是原始指针吗?
【问题讨论】:
-
我并不是说原始指针是“坏的”,但是用它们很容易做坏事。如果您不需要转移所有权并且您的对象不会超过数据的寿命,那么原始指针应该不会造成任何问题。
-
你可以考虑
observer_ptr -
@sp2danny 谢谢,关于observer_ptr的更多信息:stackoverflow.com/questions/24157735/…
-
@sp2danny 我错过了什么?我看不到
observer_ptr比原始指针有任何优势。 -
它声明了意图。如果仅用于观察者角色,原始指针是可以的。