boost::scoped_array 属于 boost 库,定义在 namespace boost 中,包含头文件 #include<boost/smart_ptr.hpp> 便可以使用。 boost::scoped_array 便是用于管理动态数组的。跟 boost::scoped_ptr 一样,也是独享所有权的。
我们还是从代码开始分析:
class Simple {
public:
public:
Simple(int param = 0) {
number = param;
std::cout << "Simple: " << number << std::endl;
}
~Simple() ;
std::cout << "~Simple: " << number << std::endl;
}
void PrintSomething() {
std::cout << "PrintSomething: " << info_extend.c_str() << std::endl;
}
number = param;
std::cout << "Simple: " << number << std::endl;
}
~Simple() ;
std::cout << "~Simple: " << number << std::endl;
}
void PrintSomething() {
std::cout << "PrintSomething: " << info_extend.c_str() << std::endl;
}
public:
std::string info_extend;
int number;
};
std::string info_extend;
int number;
};
//测试函数
void TestScopedArray() {
void TestScopedArray() {
boost::scoped_array<Simple> my_memory(new Simple[2]); // 使用内存数组来初始化
if (my_memory.get()) {
my_memory[0].PrintSomething();
my_memory.get()[0].info_extend = "Addition";
my_memory[0].PrintSomething();
(*my_memory)[0].info_extend += " other"; // 编译 error,scoped_ptr 没有重载 operator*
my_memory[0].release(); // 同上,没有 release 函数
boost::scoped_array<Simple> my_memory2;
my_memory2 = my_memory; // 编译 error,同上,没有重载 operator=
}
}
int _tmain(int argc, _TCHAR* argv[])
{
{
TestScopedArray();
return 0;
}
小结:
boost::scoped_array 的使用跟 boost::scoped_ptr 差不多,不支持复制,并且初始化的时候需要使用动态数组。另外,boost::scoped_array 没有重载“operator*”,其实这并无大碍,一般情况下,我们使用 get() 函数更明确些。
下面肯定应该讲 boost::shared_array 了,一个用引用计数解决复制、参数传递的智能指针类。