同样一个关于c++函数返回引用的有关问题
同样一个关于c++函数返回引用的问题
我对一个类的get方法该怎么写有点疑惑。
方法1会额外增加一些开销。返回值占用内存不大的时候,或许可以忽略不计,但是如果很大呢?比如m_id有1M或者更大的情况下,返回引用才更有效率
方法2,这样m_id相当于一个public变量,破坏了原有的访问属性
方法3,应该是最完美的形式了。开销,速率都得到兼顾。
这是我自己的理解,不知道对不对。虽然是个小问题,但一直困扰我,还请各位多多指教,或者发表下自己的看法。
------解决思路----------------------
你说的都对,但你忽略了一个问题,在程序开发当中很少遇到M级别在程序之间直接进行大批量文本传递的情况。
如果遇到这种情况,那就按你说的第三种
------解决思路----------------------
LZ的思考很有道理。
------解决思路----------------------
3属于看上去很美的东西,至少就你这个类来看是这样子的。string的值是肯定会在某些时刻修改的(比如setid),但是string已经外部引用了,这个时候总有一些多线程问题,比如说string的地址突然改了。虽然补救的方法很多,但是我个人更喜欢传值。
------解决思路----------------------
1M 以上的字符串用string??本身就不合理吧
------解决思路----------------------
典型写法:
有时候也可以用重载:
个人推荐第一种写法。
class ClassA
{
private:
string m_id;
public:
void setId(const string& id){m_id = id;}
string getId(){return m_id;} // 方法1
string& getId(){return m_id;} //方法2
const string& getId(){return m_id;} //方法3
}
我对一个类的get方法该怎么写有点疑惑。
方法1会额外增加一些开销。返回值占用内存不大的时候,或许可以忽略不计,但是如果很大呢?比如m_id有1M或者更大的情况下,返回引用才更有效率
方法2,这样m_id相当于一个public变量,破坏了原有的访问属性
方法3,应该是最完美的形式了。开销,速率都得到兼顾。
这是我自己的理解,不知道对不对。虽然是个小问题,但一直困扰我,还请各位多多指教,或者发表下自己的看法。
------解决思路----------------------
你说的都对,但你忽略了一个问题,在程序开发当中很少遇到M级别在程序之间直接进行大批量文本传递的情况。
如果遇到这种情况,那就按你说的第三种
------解决思路----------------------
LZ的思考很有道理。
------解决思路----------------------
3属于看上去很美的东西,至少就你这个类来看是这样子的。string的值是肯定会在某些时刻修改的(比如setid),但是string已经外部引用了,这个时候总有一些多线程问题,比如说string的地址突然改了。虽然补救的方法很多,但是我个人更喜欢传值。
------解决思路----------------------
1M 以上的字符串用string??本身就不合理吧
------解决思路----------------------
典型写法:
class ClassA
{
private:
string m_id;
public:
void setId(const string& id){m_id = id;}
const string& getId() const {return m_id;} //方法3
};
ClassA obj;
obj.setId("ok");
std::cout << obj.getId() << std::endl;
有时候也可以用重载:
class ClassA
{
private:
string m_id;
public:
std::string & Id()
{
return m_id;
}
const string& id () const
{
return m_id;
}
};
ClassA obj;
obj.id()= "ok";
std::cout << obj.id() << std::endl;
个人推荐第一种写法。