类左值仅成员功能与shared_ptr
class lvalue only member fuction with shared_ptr
仅使用左值成员函数和shared_ptr
输出
test_object::test_object()
example::get_container() &
container::container()
container::get() &
container::~container()
我希望容器对象的 get(( 函数不会被 rvalue 调用。所以我添加了 & 关键字来获取((。
但是当我将其与shared_ptr一起使用时,get(( 的这个 make & 关键字已经过时了。那么有没有另一个好技巧可以让这个工作shared_ptr??
我有一个使用静态成员函数的解决方案,它可以工作。但它很脏。
class test_object
{
public:
test_object()
{
cout << "test_object::test_object()" << endl;
}
~test_object()
{
cout << "test_object::~test_object()" << endl;
}
};
template<typename type>
class container
{
public:
container(type* data) : pdata(data)
{
cout << "container::container() " << endl;
}
~container()
{
cout << "container::~container() " << endl;
}
type* get() &
{
cout << "container::get() &" << endl;
return pdata;
}
private:
type* pdata;
};
template<typename type = test_object>
class example
{
public:
shared_ptr<container<type>> get_container() &
{
cout << "example::get_container() &" << endl;
return make_shared<container<type>>(&data);
}
private:
type data;
};
int main()
{
example ex;
auto data = ex.get_container()->get();
//this should make compiler error,but
//it doesn't because get() is called by lvalue container object in rvalue
//shared_ptr. i want this code to make compiler error
getchar();
return 0;
}
没有办法。通过 *
或 ->
访问的指针的引用始终是左值。它被烘焙到语言中,标准库智能指针类型与此核心语言一致。
shared_ptr<container<type>>::operator->
最终返回 container<type>*
,箭头运算符将应用于该运算符。箭头运算符等效于执行(*ptr).get()
。因此,您将始终将get()
应用于语言认为的左值。
这是一个不言而喻的价值。仅仅因为共享指针是临时指针,并不能改变它指向已占用存储
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++中的指针否定 (!ptr == NULL)
- 从const ptr*转换为ptr*时出现问题
- 无法使用 libtool 将 -shared 参数传递给 g++
- boost::shared_ptr和std::shared-ptr的同居
- 我可以用std::shared_ptr而不是boost::shared-ptr构建boost库吗
- shared-ptr-C++shared_ptr与unique_ptr用于资源管理