boost :: shared_ptr可以释放存储的指针而不删除它吗?
我可以看到文档中没有发布功能,也在FAQ中解释了为什么它不提供发布功能,类似于发布不能在不唯一的指针上完成.我的指针是独一无二的.我该如何发布我的指针?或者哪个提升智能指针类使用,这将允许我释放指针?我希望你不要说使用auto_ptr :)
这个问题已在本论坛中提出,但我不明白这个概念.
我正在四处阅读,似乎信号和插槽是使用函数指针实现的,即信号是一个很大的函数,它在里面调用所有连接的槽(函数指针).它是否正确?在整个故事中生成的moc文件的作用是什么?我不明白信号功能如何知道哪个插槽要调用,即哪个插槽连接到该信号.
谢谢你的时间
考虑一下
void f(vector<const T*>& p)
{
}
int main()
{
vector<T*> nonConstVec;
f(nonConstVec);
}
Run Code Online (Sandbox Code Playgroud)
下列情况不compile.The事情是vector<T*>不能转换到vector <const T*>,这不合逻辑对我来说,因为存在从隐式转换T*到const T*.为什么是这样 ?
vector<const T*>也不能转换为vector <T*>,但这是预期的,因为const T*无法隐式转换为T*.
过去几天我在Qt论坛和谷歌上搜索了很多,但我找不到任何明显的答案.
我找到了-prefix可以提供配置来指定不同安装目录的选项(甚至没有记录在Windows上),但这根本不清楚源和二进制文件的分离,因为构建仍然在源目录中完成,然后安装所需的文件将复制到安装程序.我尝试了这个-prefix选项,并遇到了一些问题.(即它不会将.pdb文件复制到安装目录.)
然后我找到了关于进行阴影构建的这个链接,但它有一个很大的限制,即构建目录必须与源目录处于同一级别.
我猜你没试过make install?所以试试吧.它应该将Qt安装到远离源的单独目录中.
你是说我配置后,我应该做nmake安装而不是nmake?我知道nmake将处理来自qmake的生成的makefile并将它们放在源Qt目录中,但是nmake install将完全做什么,即在哪个目录中安装文件以及如何指定文件的安装目录.
请注意,我已经这样做了:
configure -prefix builddir -platform win32-msvc2005
nmake install
Run Code Online (Sandbox Code Playgroud)
上面两行的效果是qt是在源目录中编译的,而不是直接编译到我用前缀指定的builddir.然后编译的文件被复制到我的builddir中.我希望能够将我的Qt文件直接构建到构建目录,因为这样我在编译期间需要4 Gb空间用于源代码.此外,pdb文件未复制到我的buildir,这是另一个问题.
我在理解如何实现Boost.MultiIndex方面遇到了一些困难.可以说我有以下内容:
typedef multi_index_container<
employee,
indexed_by<
ordered_unique<member<employee, std::string, &employee::name> >,
ordered_unique<member<employee, int, &employee::age> >
>
> employee_set;
Run Code Online (Sandbox Code Playgroud)
我想我有一个Employee[]实际存储employee对象的数组和两个地图
map<std::string, employee*>
map<int, employee*>
Run Code Online (Sandbox Code Playgroud)
名称和年龄作为键.每个映射都具有employee*指向数组中存储对象的值.这个可以吗?
如何将指向const对象的shared_ptr转换为指向非const对象的shared_ptr.我正在尝试执行以下操作:
boost::shared_ptr<const A> Ckk(new A(4));
boost::shared_ptr<A> kk=const_cast< boost::shared_ptr<A> > Ckk;
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我试图用qt信号发出标准字符串.信号将按排队方式发送.我用qRegisterMetaType注册了这个类型,就像在qt文档中说的那样,但没有运气.我正在这样注册
qRegisterMetaType<std::string>("std::string")
当字符串以数字开头,然后是一个点,然后是一个空格和一个或多个大写字符时,我需要匹配.匹配必须出现在字符串的开头.我有以下字符串.
1. PTYU fmmflksfkslfsm
Run Code Online (Sandbox Code Playgroud)
我试过的正则表达式是:
^\d+[.]\s{1}[A-Z]+
Run Code Online (Sandbox Code Playgroud)
它不匹配.对于这个问题,正则表达式是什么?
我有这个代码:
class Event{};
class CustomEvent:public Event{};
class Handler
{
public:
virtual void inform(Event e ){}
};
class CustomHandler : public Handler
{
public:
void inform(CustomEvent e){}
};
CustomEvent cEvent;
Handler* handler = new CustomHandler;
//this calls Handler::inform(Event), not CustomHandler::(CustomEvent) , as I expected
handler->inform(cEvent);
Run Code Online (Sandbox Code Playgroud)
如果我将代码更改为:
class Handler
{
public:
virtual void inform(Event e ){}
virtual void inform(CustomEvent e){}
};
class CustomHandler : public Handler
{
public:
void inform(CustomEvent e){}
};
CustomEvent cEvent;
Handler* handler = new CustomHandler;
//this calls CustomHandler::(CustomEvent) …Run Code Online (Sandbox Code Playgroud) 我希望从boost变量中获取指向基类的指针,如果我将orignally指针放到派生类上.有没有办法实现这一点.以下代码不起作用.
class A{ public: virtual ~A(){}}; class B : public A{};
typedef boost::variant<A*,B*> MyVar;
MyVar var = new B;
A* a = boost::get<A*> (var); // the following line throws exception
Run Code Online (Sandbox Code Playgroud)
也许有人有想法怎么写我自己的get函数如果请求的类型是基类的存储类型的变种,这将考验,然后做相应的投
c++ ×6
boost ×4
qt ×3
qt4 ×2
shared-ptr ×2
const ×1
installation ×1
java ×1
multi-index ×1
overriding ×1
qmake ×1
regex ×1
stl ×1
vector ×1