日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

Reply To: 如何看待STL的stack?

Home Forums 《冒号课堂》讨论区 如何看待STL的stack? Reply To: 如何看待STL的stack?

#1380
hui
Keymaster

首先,你的问题可以推广到STL的一切container类,而不必限于stack类。

其次,所有container类都是引用语义的。原因很简单,虽然container允许复制,但复制后的两个container是各自独立变化的,而且其标识是有显著意义的(引用语义!=noncopyable)。

最后,虽然STL中的container类本身是引用语义的,但其运算却是基于值语义的。为何如此设计呢?一个简单的答案是:C++中的array便是如此的( ISO C++ standard:no arrays of references),如果STL中的container的用法与最基本的数组不同,显然有违直觉的。稍微复杂的说明如下:

假设container的运算是基于引用语义的。

Container c1, c2;

Element el;

c1.insert(el);

c2.insert(el);

此时如果改变c1中el的值,将会同时改变c2中el的值,而这未必是设计者的初衷。

再假设:

Container c;

{

Element el;

c.insert(el);

}

…// 此时el出了有效范围,将被析构,那么c岂不是含有了一个illegal的元素?

如果用户的确需要引用语义的container运算呢?很简单,让container的运算作用于element对象的指针即可。但这时就要特别注意element对象的生命周期问题了。

 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)