中国开发网: 论坛: 程序员情感CBD: 贴子 117679
holly
技术贴: STL 哲学的问题
嘿嘿, 这里不谈 stl 哲学的好处, 虽然好处的存在是显而易见的.

整个 stl 哲学的基础是: 1. 整个 stl 基于预先定义的 iterator 家族的设定. 也就是说, stl 的最基本概念就是 iterator. 2. 整个 stl 的语义都是值语义.

由于值语义, 置于 stl 容器内的任何东西都必须而且只能归容器所有, 由此产生的一个隐含语义是, stl 容器通常假设对象 copy 的代价是可以基本忽略的.

OK, 现在我有这么一个东西需要实现. 一个 Double Linked List, Oh, yeah. stl provided list container for us. It is perfect! Wait, wait... 这个 double linked list 的元素是这样一个结构:

struct my_string {
u32 length;
char contents[];
};

是一个变长的存放字符串的结构. No, don't tell me to use std::string instead. That's another topic.

问题来了, 每个 my_string 的 instance 的长度可以从 4 字节到 4G 字节. 可以看到复制的代价了吧? OK, 明显 stl container 遇到问题了.

别急. I know you wanna suggest std::auto_ptr or boost:shared_ptr or other pointer encapsulators. 这样是可以绕过复制代价了:

list< auto_ptr<my_string> > my_list;

可是你不觉得看一个 auto_ptr 没法让你一眼就明白这是保存什么的吗? OK, 假设我们都能明白, 但是当经过这样 3 个指针之后, 我就不信你还能看得明白. typedef? 嗯, 变成另外一个类型名, 短多了. 但是你还想得起来当初是定义的什么吗?
若你在年轻时上过水木, 它会一生跟随着你, 如一场浮动的盛宴

禁色和禁果仍被保存吗?
这世界有否给潜移默化?
离过家回了家仍住中环吗?
-----信有带到新居里烧吗?

一切美好的都会消失

人要是没有理想, 跟咸鱼有什么两样?

“把人们引向艺术和科学的最强烈动机之一,是要逃避日常生活中令人厌恶的粗俗和使人绝望的沉闷,是要摆脱人们自己反复无常的欲望的桎梏。一个修养有素的人总是渴望逃避个人生活而进入客观直觉和思维的世界。”

不要忘了,这个世界穿透一切高墙的东西,它就在我们的内心深处,他们无法达到,也接触不到,那就是希望。(FROM《肖申克的救赎》)

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录