我用Google搜索,一无所获.我想我只是不知道如何输入正确的问题. 好的,我的简单MemoryBlock类有两个成员数据,int size和int * data.因此,为了构建一个复制构造函数,我使用std :: copy来进行内存复制.现在我想尝试使用C智能指针替换原始指针.假设使用unique_ptr< int>数据.以下代码
我正在实现一个特殊目的句柄类. ihandle是一个所有句柄必须实现的接口,在我的实际代码中,它将具有运算符重载 – > *.但是对于这个例子,我想保持简单,它只有get函数. template <typename T> class ihandle { public: virtual T* get(); }; 一种可能的实现是ptr,它只是一个原
我正在使用的代码有自己的智能指针实现,它可以进行简单的引用计数.是的,我们不应该有自己的实施.是的,我们应该使用boost或者其中之一.忍受我. 我发现我想编写这样的代码: ... CountedPointer<Base> base; ... CountedPointer<Derived> derived; ... base = derived; 但是,Counted
这不编译, #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); } 但这样做: #include <boost/intrusive_p
为什么以下代码编译 shared_ptr<parent> p(new parent); 而下面的则没有 shared_ptr<parent> p2 = new parent; 是否有任何理由不允许’=’符号用于shared_ptr? 一般来说,如果指针一样 int *p = new int; 应该与那个相同 int *p(new int); 不是吗?解决方法:std :: shared_ptr
要学习C,我正在编写游戏.在这个游戏中,可以有两个玩家.那些玩家可以通过套接字相互连接.在向玩家标题添加带有唯一指针的向量后,我收到错误:“错误C2280’std :: unique_ptr> :: unique_ptr(const std :: unique_ptr< _Ty,std :: default_delete< _Ty>>&)’ :尝试引用已删除的函数“.
我有一个工厂设计模式的小例子,我对这部分感兴趣: std::make_unique< A >(*this) ……特别是*这个. 这是否意味着clone()方法返回一个指向工厂类成员的std :: unique_ptr? createInstance()总是返回Factory类的同一个成员? 我只是困惑了什么std :: make_unique< A>(* this)应该这样
我正在寻找一种方法来确定哪一行代码负责增加shared_ptr的引用计数?例如,假设一个条件,我有一个智能指针,它的引用计数是12.我倾向于知道我的项目中的c代码或赋值运算符的哪一行负责,只要它是13. 谢谢你的帮助解决方法:这是依赖于标准库的实现,因为shared_ptr的实现不是语言标准的一
我想在我的代码中开始使用智能指针,但我真的不想使用Boost因为它太大了. 任何人都可以推荐一个简单的单文件智能指针实现? 谢谢,Boda Cydo.解决方法:不幸的是,智能指针并非都那么简单,因此实现可能非常复杂.话虽如此,如果你正在使用g,你可以得到像shared_ptr这样的东西,而不必使用Bo
我只是习惯了使用std :: auto_ptr的智能指针. 假设我想用auto_ptr和普通指针调用一个函数. auto_ptr<uint32> data_smart(new uint32[123])]); uint32 data_fix[123]; uint32* data_dumb = new uint32[123]; processData(data_smart); processData(data_fix); processData(data_d
参见英文答案 > Why destructor is not called on exception? 6个 我的智能指针实现如下所示,在异常情况下不会释放内存. template <class T> class SMARTPOINTER { public: SMARTPOINTER(T* pointee)
我有: class A : public std::enable_shared_from_this<A> {...}; class B : public A {...}; void doCoolStuff(std::weak_ptr<A> obj) {...} void doCoolStuff(std::weak_ptr<B> obj) { ... doCoolStuff(std::static_pointer_cast<A>(obj.lock
#include <vector> enum ListOfGameStates { // List of game states }; class GameState() { public: GameStates(); // Initializes protected (global) variables virtual ListOfGameStates run() = 0; protected: // Heavywe
我在main中创建了一个示例类的指针.我将此指针传递给函数function1().此函数必须使用指针作为共享指针,并使用此指针执行某些操作.在退出函数1()时,由于shared_ptr而调用了样本的析构函数.当我将相同的指针传递给不同的函数时,该指针不再有效,程序崩溃. 1.如何在function1()中推迟
所以我的理解是,当对象的最后剩余所有者被销毁或重新分配时,shared_ptr会自动从内存中释放出来(看起来太好了?)并且当许多实例可能共享同一个对象时它很有用.正确? 所以在我的情况下,我正在制作一个2d平铺世界,所以我在屏幕上绘制了许多相同的纹理. 我有 std::map<int, shared_ptr<T
今天,我在clang中遇到了一个让我感到惊讶的编译问题.我想是合理的,但我喜欢深入挖掘并听到更多细节.如果可能,还有一些标准参考. 我有一个带有模板方法的类,它依赖于一个成员,它的类型在头文件中未定义(但不在源代码中).类似于以下内容: // Menu.h class Page; class Menu { publi
我正在编写一个智能指针countptr,我已经达到了减速带. countsptr的基本功能是像任何其他智能指针一样工作,并且还有一个指向单个对象的指针数.到目前为止,代码是: [解决了] #include "std_lib_facilities.h" template <class T> class counted_ptr{ private: T* pointer;
为了编写更好的代码,我已经致力于使用boost的智能指针. boost :: shared_ptr应该像这样初始化吗? boost::shared_ptr<TypeX> px(new TypeX); 我的混淆来自类似于此的代码块: void MyClass::FillVector() { boost::shared_ptr<TypeX> tempX; if(//Condition a) {
我知道SP和WP之间的差异,SP会自动重新收集动态分配的内存.但我不知道何时以及如何使用WP?谁能举个例子?解决方法:您必须知道使用SP会增加对象的引用计数,而使用WP则不会.所以WP只是一个地址存储,它不能用于访问对象的字段,除非你提升它.但是如果对象已经被释放,wp.promote()将返回一