我正在创建一个字符串解析器类,并且有许多子子私有成员函数都需要访问输入。我想避免将输入作为每个函数的参数,例如。
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
答案 0 :(得分:3)
对于您的第一个问题,不需要“重置”任何成员变量。该对象被破坏,不应再次使用。
对于第二个问题,这取决于。大多数情况下,您可以查看新的智能指针而不是指针,但从资源所有权的角度来看:资源是否可以拥有多个同时拥有者(std::shared_ptr
),或者一次只能拥有一个所有者({{1} })?如果您不打算转让所有权,那么除了作为一个不错的自动删除指针之外,不需要真正使用智能指针。你应该问自己的一个更大的问题是,你需要使用指针吗?通常,答案就是“不”。
答案 1 :(得分:1)
不,您不需要在销毁时将指针类型指定给nullptr
。
input
超出范围后,您的“或”案例会为您提供悬空参考。这是未定义的行为。
至于使用std::unique_ptr
,根据具体情况决定。如果你想拥有多个“拥有”指针的东西,std::shared_ptr
可能是更好的选择。
答案 2 :(得分:0)
由于您正在尝试解析std::string
,您是否考虑过将迭代器传递给您的函数?那些可以简单地指向字符串中的空格,你的解析器当前正在阅读。