我对 C 语言很陌生,但我认为我说得对,在堆栈上声明的对象应该在超出范围时自动销毁/销毁?在我目前正在使用的迷你项目中,情况并非如此。
void MainWindow::clickTest() {
FunkyNumber num = 4;
FunkyNumber num2 = 6;
num += num2;
std::cout << num << std::endl; // This works okay!
// Should be destroyed here!
}我的析构函数应该这样做:
virtual FunkyNumber::~FunkyNumber() {
std::cout <<"goodbye cruel world! (" << m_intValue <<")" << std::endl;
// m_intValue is just the int value of this"FunkyNumber"
}但是标准输出没有任何结果!
可能应该提到我正在使用 Qt - 但这只是一个普通的 C 类,所以从我能看出的情况来看这并不重要...
编辑:
funkynumber.cpp:
#include"funkynumber.h"
FunkyNumber::FunkyNumber(int num)
: m_intValue(num) {
std::cout <<"made a funkynumber" << num << std::endl;
}
FunkyNumber::~FunkyNumber() {
std::cout <<"goodbye cruel world! (" << m_intValue <<")" << std::endl;
}
int FunkyNumber::intValue() const {
return m_intValue;
}
void FunkyNumber::operator+=(const FunkyNumber &other) {
m_intValue += other.intValue();
}
void FunkyNumber::operator=(const FunkyNumber &other) {
m_intValue = other.intValue();
}
bool FunkyNumber::operator==(const FunkyNumber &other) {
return other.intValue() == m_intValue;
}
std::ostream &operator<<(std::ostream &outStream, const FunkyNumber &num) {
outStream <<"FunkyNumber (" << num.intValue() <<")";
return outStream;
}我无法重现该行为。
#include<iostream>
struct FunkyNumber{
int m_intValue;
FunkyNumber::FunkyNumber(int num)
: m_intValue(num) {
std::cout <<"made a funkynumber" << num << std::endl;
}
FunkyNumber::~FunkyNumber() {
std::cout <<"goodbye cruel world! (" << m_intValue <<")" << std::endl;
}
int FunkyNumber::intValue() const {
return m_intValue;
}
void FunkyNumber::operator+=(const FunkyNumber &other) {
m_intValue += other.intValue();
}
void FunkyNumber::operator=(const FunkyNumber &other) {
m_intValue = other.intValue();
}
bool FunkyNumber::operator==(const FunkyNumber &other) {
return other.intValue() == m_intValue;
}
};
std::ostream &operator<<(std::ostream &outStream, const FunkyNumber &num) {
outStream <<"FunkyNumber (" << num.intValue() <<")";
return outStream;
}
void call(){
FunkyNumber num = 4;
FunkyNumber num2 = 6;
num += num2;
std::cout << num << std::endl; // This works okay!
// Should be destroyed here!
}
int main(int argc, char **argv){
call();
std::cout <<"call ended" << std::endl;
}这很好用。人们推广 SSCCE 的原因不仅是为了更容易帮助您,还因为它可以帮助您自己找到问题所在(这显然不在您发布的代码中)。
这是在 Windows GUI 应用程序中吗(带有
如果是,从命令行运行时标准输出不会自动显示。我不确定这是为什么,但 IIRC 正在运行:
myapp | cat应该可以正确设置标准输出。
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.