C++ "shared_ptr" 不明确

运行环境:VS2017,C++,boost_1_68_0-msvc-14.1-64。

问题描述:在运行从官网下载安装的boost库中的shared_ptr智能指针时,程序编译出错,程序代码如下:

#include<iostream>
#include<vld.h>
#include<boost\shared_ptr.hpp>

using namespace std;
using namespace boost;

void main() {
	int *p = new int(10);
	shared_ptr<int> ps(p);
	cout << *ps << endl;
}

错误截图,如下:

原因分析:boost的一些库,比如shared_ptr已经被高版本的STL采纳了,命名空间std和boost中都有shared_ptr,产生冲突。

解决方案1

注释掉代码的第6行代码 “using namespace boost;” 就可以正常编译。

存在的问题:不引入boost命名空间的话,可能无法正常调用boost库中其他成员。

解决方案2

显式指定shared_ptr来自哪个命名空间,使用 boost::shared_ptr 或者 std::shared_ptr。这样做的好处是不影响其他boost库的成员调用,推荐此方案。

#include<iostream>
#include<vld.h>
#include<boost\shared_ptr.hpp>

using namespace std;
using namespace boost;

void main() {
	int *p = new int(10);
	boost::shared_ptr<int> ps(p);
	cout << *ps << endl;
}

 

C++ 中的 `shared_ptr` 是一个智能指针,用于管理动态分配的对象。它是 C++11 引入的一个特性,位于 `<memory>` 头文件中。 `shared_ptr` 可以用来共享一个对象的所有权。它会记录有多少个 `shared_ptr` 共享同一个对象,并且当所有的 `shared_ptr` 都不再使用该对象时,会自动释放对象的内存。 使用 `shared_ptr` 的语法如下所示: ```cpp #include <memory> int main() { // 创建 shared_ptr std::shared_ptr<int> ptr1 = std::make_shared<int>(42); // 共享对象的所有权 std::shared_ptr<int> ptr2 = ptr1; // 使用 shared_ptr 操作对象 *ptr1 = 100; std::cout << *ptr2 << std::endl; // 输出:100 // 释放对象内存 ptr1.reset(); std::cout << *ptr2 << std::endl; // 输出:100 return 0; } ``` 在上述示例中,我们首先创建了一个 `shared_ptr`,并使用 `make_shared` 函数动态分配一个整数对象,并将其初始化为 42。然后我们创建了另一个 `shared_ptr`,并将其指向第一个 `shared_ptr` 所管理的对象。通过这种方式,两个 `shared_ptr` 共享同一个整数对象。我们可以通过任意一个 `shared_ptr` 来访问和操作该对象,并且当两个 `shared_ptr` 都不再使用该对象时,会自动释放对象的内存。 需要注意的是,`shared_ptr` 使用引用计数的方式来管理对象的生命周期。当引用计数变为零时,即没有任何 `shared_ptr` 指向该对象时,会自动调用对象的析构函数来销毁对象。这种智能指针可以避免常见的内存泄漏问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值