标签: smart-pointers

将shared_ptr与堆栈上创建的对象进行比较

我有一种情况,我想比较一个shared_ptr封装的对象与堆栈上创建的相同类型的对象.目前,我正在获取原始指针并取消引用它来进行比较,例如:

Object A;
std::shared_ptr<Object> B;

// assume class Object has its comparison operators overloaded
if ( *B.get() < A )
    // do stuff here
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?这假设当两个对象相遇以便相互比较时,一个是shared_ptr而另一个不是.

c++ smart-pointers

0
推荐指数
1
解决办法
854
查看次数

有没有人给这些智能指针(auto_any,scoped_any,shared_any)一个试驾?

我正在调查具有Windows CE和Mobile"共享"功能的智能指针,其中VS 2008 tr1 std::shared_ptr无法使用(由于与CE上没有的v.9 dll的链接,显然,如果我理解正确的话).

有一篇半旧的MSDN杂志文章,其中包含来自Microsoftie(Eric Niebler)的消息:使用我们的自定义C++类实现更可靠的资源管理.

他的推理,设计和实现shared_any看起来很稳固,但我想知道是否有人在任何平台(不一定是WinCe/WM)上实际测试过该批次?

c++ memory smart-pointers

0
推荐指数
1
解决办法
260
查看次数

C++ shared_ptr如何删除多个shared_ptr的指针

我在这个项目上工作,

我遇到的问题是,当我需要它时,它并没有真正被删除,因为它有一些指向它的共享指针.

我该如何解决这个问题,请帮忙.

c++ smart-pointers shared-ptr

0
推荐指数
1
解决办法
1282
查看次数

c ++:std :: tr1 :: shared_ptr来自此

我有以下代码:

#include <memory>

class Foo;
typedef std::tr1::shared_ptr<Foo> pFoo_t;

class DoSomething
{
public:
    static void doSomething( pFoo_t p) { printf( "doing something...\n"); }
    static void doSomethingElse( pFoo_t p) { printf( "doing something else...\n"); }
};

class Foo
{
public:
    Foo() { printf( "foo()\n"); }
    ~Foo() { printf( "~foo()\n"); }
public:
    void doSomething() { DoSomething::doSomething(pFoo_t(this)); }
    void doSomethingElse() { DoSomething::doSomethingElse(pFoo_t(this)); }
};

int _tmain(int argc, _TCHAR* argv[])
{
    Foo foo;
    foo.doSomething();
    foo.doSomethingElse();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我开始这个样本,然后我得到下一个断言:_BLOCK_TYPE_IS_VALID(pHead-> nBloakUse).

我怎么能避免这个?

我使用以下代码来解决此问题:

class Foo;
typedef …
Run Code Online (Sandbox Code Playgroud)

c++ class smart-pointers shared-ptr weak-ptr

0
推荐指数
1
解决办法
1289
查看次数

简单的提升智能指针语法问题

使用任何一个boost::scoped_ptrboost::shared_ptr我得到错误

1> *\algomanager.cpp(28):错误C2064:term不计算为带1个参数的函数

我有这样的代码...

class X{
  boost::shared_ptr<cPreFilterProcess> preProcess;
public:
  X(){
    preProcess(new cPreFilterProcess(pars));
  }
};
Run Code Online (Sandbox Code Playgroud)

我错过了什么?谢谢.

c++ boost smart-pointers shared-ptr

0
推荐指数
1
解决办法
682
查看次数

boost :: scoped_ptr指针的值究竟是什么?

我试图理解的语法boost::scoped_ptr.让我们定义并向标准输出写入scoped_ptr指针及其指向的值:

#include <boost/scoped_ptr.hpp>
#include <iostream>

int main()
{
  boost::scoped_ptr<int> p{new int{1}};

  std::cout << p.get() << '\n'; // ok
  std::cout << p << '\n';       // error   


  std::cout << *p.get() << '\n'; // ok
  std::cout << *p << '\n';       // ok. *p==*p.get()
}
Run Code Online (Sandbox Code Playgroud)

题.为什么现在*p.get()==*pstd::cout << p << '\n';不会编译?

我的工作on g++ -std=c++11 -O2 -Wall -pedantic.

c++ boost smart-pointers

0
推荐指数
1
解决办法
1100
查看次数

为什么获取/设置Auto_Ptr会导致此编译器错误

我有一个auto_ptr的地图,我只是想设置和获取地图元素,但它产生的编译器错误.我不明白编译器错误意味着什么,出错了什么?

获取编译错误:

[错误]将'const std :: auto_ptr'作为'this'参数传递给'std :: auto_ptr <_Tp> :: operator std :: auto_ptr_ref <_Tp1>()[with _Tp1 = int; _Tp = int]'丢弃限定符[-fpermissive]

设置编译器错误:

[错误]'operator ='不匹配(操作数类型是'std :: map,std :: auto_ptr> :: mapped_type {aka std :: auto_ptr}'和'int*')

另外我听说不建议在标准c ++库集合(list,vector,map)中使用auto_ptr.我应该在下面的代码中使用什么样的智能指针?

std::map <std::string, std::auto_ptr<int> > myMap;

// Throws compiler error
std::auto_ptr <int> a = myMap["a"];
// Also throws compiler error
myMap["a"] = new int; 
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers

0
推荐指数
1
解决办法
166
查看次数

为什么g ++(4.8.2)使用c ++ 0x作为默认值?

我有一个代码,它使用自c ++ 11以来支持的std :: unique_ptr.

#include <memory>

int main() {
        std::unique_ptr<int> p_int(new int(3));
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以构建这个代码,但我仍然感到困惑.因为我的g ++版本是4.8.2,它支持c ++ 11.g ++使用c ++ 0x作为默认值的原因是什么?我应该如何将c ++ 11设置为默认值?现在我正在使用cmake,所以也许我应该在CMakeLists.txt中设置c ++ 11 ..

$ which g++   
/usr/bin/g++
$ g++ --version
g++ (20140812 (SCEL u2.0.0.0)) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ main.cc  
main.cc: In function ‘int main()’:
main.cc:4:2: …
Run Code Online (Sandbox Code Playgroud)

c++ g++ smart-pointers c++11

0
推荐指数
1
解决办法
358
查看次数

c ++ shared_ptr&memcpy错误

我已经决定转向现代的c ++实践,我试图调整我的旧代码来使用智能指针.我有一个数据包类,包含数据包数据,以及其他一些变量.

class Packet
{
public:
    Packet(int connId, std::shared_ptr<char[]> buff, size_t pLen) 
        : connID(connId), packetLen(pLen)
    {
        buffer = buff;
    }

    Packet(){}

    int connID;
    size_t packetLen;
    std::shared_ptr<char[]> buffer;
};
Run Code Online (Sandbox Code Playgroud)

我有一个测试功能,可以在新分配的缓冲区中创建和插入数据.

std::vector<Packet> packetV;

void createPacket()
{
    std::shared_ptr<char[]> data = std::make_shared<char[]>(10);

    for (int i = 0; i < 5; ++i)
    {
        uint8_t byte = 5;
        memcpy(*data.get() + i, &byte, sizeof(uint8_t));
    }

    packetV.push_back(Packet(1, data, 5*sizeof(uint8_t)));
}

//(Main function)
void main()
{
    std::string input;
    do
    {
        std::cin >> input;
        if (input == "packet") createPacket();
        else …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers shared-ptr

0
推荐指数
1
解决办法
1216
查看次数

将清除共享智能指针上的呼叫重置

我最近改变了我的原始指针,std::shared_ptr在这样的容器中使用:

std::vector<std::shared_ptr<AbstractPathContainer>> mGeneratedPaths;
Run Code Online (Sandbox Code Playgroud)

当我打电话clear()给这个容器时,它会reset()在每个容器上调用方法std::shared_ptr吗?

c++ smart-pointers reset shared-ptr stdvector

0
推荐指数
1
解决办法
266
查看次数

标签 统计

c++ ×10

smart-pointers ×10

shared-ptr ×5

boost ×2

c++11 ×1

class ×1

g++ ×1

memory ×1

reset ×1

stdvector ×1

weak-ptr ×1