标签: boost-smart-ptr

boost :: scoped_ptr是否违反了逻辑constness的准则

在boost :: scoped_ptr中operator*,operator->它们是声明的const函数,尽管它们返回T&并且T*可能允许客户端更改底层数据.这违反了逻辑常量的概念(Myers,Effective C++)

const函数不应该有签名吗?

const T& operator*() const;
const T* operator->() const;
Run Code Online (Sandbox Code Playgroud)

c++ const smart-pointers boost-smart-ptr

3
推荐指数
1
解决办法
510
查看次数

这里发生了什么?

这不编译,

#include <boost/intrusive_ptr.hpp>

class X
{
public:
 void intrusive_ptr_add_ref(X* blah)
 {
 }

void intrusive_ptr_release(X * blah)
{
}

};



int main()
{
  boost::intrusive_ptr<X> ex(new X);
}
Run Code Online (Sandbox Code Playgroud)

但这样做:

#include <boost/intrusive_ptr.hpp>

class X
{
public:
  friend void intrusive_ptr_add_ref(X* blah)
  {
  }

  friend void intrusive_ptr_release(X * blah)
  {
  }

};



int main()
{
  boost::intrusive_ptr<X> ex(new X);
}
Run Code Online (Sandbox Code Playgroud)

还有这个 :

    #include <boost/intrusive_ptr.hpp>

    class X
    {
    public:


    };


    void intrusive_ptr_add_ref(X* blah)
      {
      }

      void intrusive_ptr_release(X * blah)
      {
      }

int main()
{
  boost::intrusive_ptr<X> ex(new X); …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers boost-smart-ptr

3
推荐指数
1
解决办法
1548
查看次数

将boost :: shared_ptr转换为实际的类

有人会这样做吗?例如:

Client* client = it->second;
Run Code Online (Sandbox Code Playgroud)

其中 - >第二个是boost :: shared_ptr到Client错误:

cannot convert `const ClientPtr' to `Client*' in initialization
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-smart-ptr

2
推荐指数
2
解决办法
3535
查看次数

shared_ptr 的移动语义

我刚开始学习智能指针,遇到了一个似乎与理论相矛盾的情况。例如,当我们使用 shared_ptr 并且如果调用复制语义时,对象共享所有权并且引用计数为 2。这是可以理解的。例如代码。

 class Test {
    public:
    Test(){ cout << "Const" << "\n"; }

    void Disp(){
        cout << "Class Test()\n";
    }

    ~Test(){ cout << "Dest" << "\n"; }
 };

int main()
{
 Test *p = new Test();
 shared_ptr<Test> p1(p);
 shared_ptr<Test> p2(p1); // = make_shared<Test>(*p1);

 p1->Disp();
 p2->Disp();

}
Run Code Online (Sandbox Code Playgroud)

输出很好,因为:

Const
Class Test()
Class Test()
Dest
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试将语义移动为

int main()
{
 Test *p = new Test();
 shared_ptr<Test> p1(p);
 shared_ptr<Test> p2 = make_shared<Test>(*p1);

 p1->Disp();
 p2->Disp();

}
Run Code Online (Sandbox Code Playgroud)

那么 p1 应该已经失去了所有权。因此 p1->Disp() 应该是有效的。因为 make_shared 将转移所有权并重置 …

c++ shared-ptr boost-smart-ptr c++11

-1
推荐指数
1
解决办法
56
查看次数

标签 统计

boost-smart-ptr ×4

c++ ×4

smart-pointers ×2

boost ×1

c++11 ×1

const ×1

shared-ptr ×1