第十二章 12.1.1节练习

练习12.1

在此代码的结尾,b1和b2各包含多少个元素?

StrBlob b1;
{
    StrBlob b2 = {"a", "an", "the"};
    b1 = b2;
    b2.push_back("about");
}

解答:

在b2被销毁前,b1和b2中都应该有4个元素。

因为使用shared_ptr的目的,就是程序需要在多个对象间共享数据。

所以,这两个对象的数据是共享的。


练习12.2

编写你自己的StrBlob类,包含const版本和front和back。

解答:

如果是第一次读到这里,或者时间有限。

建议将书中的实现抄写一份,至少能达到在一个工程中编译成功。

在通过使用,进行单步调试,来了解该类是如何运作的。


练习12.3

StrBlob需要const版本的push_back和pop_back吗?如果需要,添加进去。否则,解释为什么不需要。

解答:

出于对数据的保护,还是应该进行添加的。

这两个操作,都涉及到对成员变量的修改操作。

为了保证共享对象的元素不会在这个操作中修改状态,还是需要加上const的。


练习12.4

在我们的check函数中,没有检查i是否大于0。为什么这个可以忽略这个检查?

解答:

是size_type这个类型。这个类型从cplusplus reference中看是等价于size_t的,所以不用担心它的值会小于0。


练习12.5

我们未编写一个接受initializer_list explicit(参见7.5.4节,第265页)参数的构造函数。讨论这个设计策略的优点和缺点。

解答:

explicit参数的构造函数只能用于直接初始化过程。

这样做的好处是,我们可以在一开始的时候就对类对象进行初始化,不必再为对象是否有初始值而担忧。

缺点,这样可能会降低使用的灵活性(自己感觉都很勉强,暂时也想不出有什么缺点了)

你可能感兴趣的:(C++,primer,5ed)