它与共享指针(c++)一起正常工作吗
is it working properly with share pointers (c++)
我有这样的代码:
typedef std::shared_ptr<int> BUFFER_TYPE
class MyClass
{
BUFFER_TYPE buffer;
public:
MyClass(int n)
{
buffer=std::make_shared<int> (n);
}
MyClass()
{
buffer=null;
}
BUFFER_TYPE GetBuffer()
{
return buffer;
}
}
MyClass GetMyClass()
{
MyClass x(200);
return x;
}
void SetMyClass(MyClass cl)
{
MyClass y=cl;
BUFFER_TYPE buffer=y.GetBuffer();
buffer[20]=100;
}
void main()
{
MyClass c(100);
MyClass d=c;
MyClass e=GetMyClass();
SetMyClass(e);
BUFFER_TYPE buffer=e.GetBuffer();
printf("Buffer is %dn",buffer[20]);
}
这个代码有内存泄漏吗?
它工作正常吗?
我是否正确使用shared_ptr?
请注意,缓冲区应该是一个指针,指向一个数组,比如100 int,而不是一个整数。
由于buffer
应该是int
的数组,因此代码不正确。std::shared_ptr
管理指向单个对象的指针。使用std::vector<int>
代替std::shared_ptr<int>
。
首先,请不要使用宏。只需拼写出类型或使用typedef
即可。
其次,不,您没有分配数组。您正在分配一个int
。
正如其他人已经说过的,您正在为单个int而不是数组分配内存。你可以试试shared_array(http://www.boost.org/doc/libs/1_54_0/libs/smart_ptr/shared_array.htm),或
shared_ptr<vector<int> >
如果您真正想要的是共享这个缓冲区。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程