相关疑难解决方法(0)

使用make_shared创建shared_ptr是否有任何缺点

使用make_shared<T>()而不是使用是否有任何缺点shared_ptr<T>(new T).

提升文档状态

用户一再请求工厂函数创建给定类型的对象并向其返回shared_ptr.除了方便和风格之外,这样的函数也是异常安全且相当快的,因为它可以对对象及其相应的控制块使用单个分配,从而消除了shared_ptr的构造开销的很大一部分.这消除了关于shared_ptr的主要效率投诉之一.

c++ boost shared-ptr

51
推荐指数
5
解决办法
1万
查看次数

C++原始指针和std :: shared_ptr

我正在使用std::shared_ptr,在我的软件开发过程中,我遇到了几个让我对内存管理产生怀疑的案例.我有一个第三方库,它总是给我提供函数的原始指针,在我的代码中我将它们转换为std::shared_ptr(从std而不是boost.顺便说一句,两者之间有什么区别?).所以我想说我有以下代码:

ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
Run Code Online (Sandbox Code Playgroud)

现在当共享指针超出范围时会发生什么(假设它在函数中被声明为本地,现在我正在退出该函数).请问ClassA对象仍然存在,因为原始指针指向它?

c++ pointers shared

17
推荐指数
2
解决办法
1万
查看次数

shared_ptr用于原始指针参数

当函数需要char*时,你能传入一个shared_ptr吗?

我正在读取整个文本文件(长度= 100),并希望将char存储到char []数组中.我使用的天真的方式是这样的:

ifstream dictFile(fileName);
size_t fileLength = 100;
char* readInBuffer(new char[fileLength]);
dictFile.read(readInBuffer, fileLength);
//processing readInBuffuer..............
delete[] readInBuffer;
dictFile.close();
Run Code Online (Sandbox Code Playgroud)

如果在delete []语句之前抛出异常,则会发生内存泄漏.我想知道我是否可以使用shared_ptr readInBuffer(new char [fileLength]); 但功能原型

读(char*s,streamsize n)

不会接受智能指针作为输入?任何招数?

编辑:我正在尝试写这样的东西:

shared_ptr<char[]> readInBuffer(new char[fileLength]);
dictFile.read(readInBuffer.get(), fileLength);
Run Code Online (Sandbox Code Playgroud)

但它不会编译.

c++ pointers function smart-pointers

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

标签 统计

c++ ×3

pointers ×2

boost ×1

function ×1

shared ×1

shared-ptr ×1

smart-pointers ×1